Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADODataSetDeforeEdit ----> Имя текущего поля


Silver_ ©   (2003-07-07 12:44:00) 

Как во время ADODataSetDeforeEditузнать имя поля которое собираюсь редактировать.


ЮЮ   (2003-07-08 03:19:00) [1]

>ведь можно послать сообщение (мной не известное, а значит не перекрытой) моей проге и любое поле станет редактируемое :(,

:-) Это если управлять доступом на уровне Enabe/Disable наследникм WinControl-а, то можно. Но если какая-то кнопка или DBEdit станут доступны, но DataSet.Fields[0].ReadOnly, то ничего в неё не исправишь



Sandman25   (2003-07-07 18:42:00) [2]

Я посмотрел в исходниках. При изменении текста в DBEdit он вызывает (через FDataLink) Dataset.Edit, который НЕ ЗНАЕТ, какое поле собираются изменить. Поэтому забудь свою идею использования BeforeEdit. Ты можешь найти штуки 4 варианта решения твоей проблемы в этом обсуждении :)


Silver_   (2003-07-07 18:00:00) [3]

Может меня не поняли

|---|---|---|---|--
| A | B | C | D |
|---|---|---|---|--
| B | 1 | 2 | 3 |
| C | 4 | 5 | 6 |
| D | 7 | 8 | 9 |
|---|---|---|---|--

Поле А показивает при попытке редактировать редактирования
какого поля нужно дать по рукам:
... ADODataSetBeforeEdit ...
begin
...
If UpperCase(CurrentField.Name) = UpperCase(DataSet.FieldValues["A"]) then
ShowMessage("Руки прочь!");
...
end.


Единственнаянеизвестная в данной задаче CurrentField.

ЗЫ. Если и щас не поймут то тогда придется вешаться :о(


Silver_   (2003-07-07 16:56:00) [4]

Вобщем Так хочу ПЕРЕД началом редактирования проверить право юзера на редактирование определенных(из конкретного списка) полей, для чего естественно необходимо знать а какое поле юзер собственно собирается редактировать.

Попробую немножко по понятней разьясниться:

|------I-------|------II----|--...
| PrivateField | All Fields |
|--------------|------------|--
| X | 123 |
| | абв |
| X | 123 |
| | 1а3 |
| X | 1-3 |
|--------------|------------|--

Если в приватном(I) поле [Х] значит эту запись редактировать нельзя в противном случае без проблем, кстати для шефа чтоб редактировать эту запись сначала надо снять [Х] а потом как все.
Теперь надо проверить какое поле собираюсь редактировать Если не Приватное тогда смотрим можно ли. А на приватное и так ограничения уже имеются. Получается для редактирования записи надо снять [Х] в приватном поле, на котором стоят ограничения.
Теперь представим я не в курсе какое поле юзер собирается редактировать, и проверяю наличие [Х]: Получится что даже если шеф захочет снять [Х] в приватном поле я ему дам по рука там ведь стоит [Х] и эту запись нельзя редактировать.


Anatoly Podgoretsky   (2003-07-07 16:09:00) [5]

Раз поле можно редактировать в любом случае, то тогда какая разница, ставим ДА, редактируем запись, ставим нет и пусть дальше администрация редактирует.


Silver_   (2003-07-07 16:06:00) [6]


> а можно ли ехать на нем 200км/ч

Вобщето не так.

при попытке завести автомобиль, чтоб он (автомобиль) проверил а имеет ли водила право его заводить!

так как именно это и осуществить.


Sandman25   (2003-07-07 16:04:00) [7]

Silver_ © (07.07.03 15:26)

Тогда остается только работать либо с событиями TField, либо с TDataSource.OnDataChange


Johnmen   (2003-07-07 15:40:00) [8]

>Silver_ © (07.07.03 15:26)
>Лучший вариант в НД перед попыткой редактирования проверять а
>можно ли,...

А еще лучший вариант - перед попыткой сесть за руль автомобиля проверить, а можно ли ехать на нем 200км/ч
:)))


Silver_   (2003-07-07 15:26:00) [9]


> Sandman25 © (07.07.03 15:08)
> Если редактируется в DBGrid

В принципе именно в данном случае это так но в следующем етапе предполагается делать форму для внятного отображения/редактирования данных. Не хочется в будущем ступать по тем же граблям. Да и потом бивают и такие моменты когда некоторые поля могут появлятся/повторяться в других формах (для быстрого доступа/редактирования, добавления) тогда придется заботится и об этом. Лучший вариант в НД перед попыткой редактирования проверять а можно ли, если нет - по рукам! Тем более что таких ядренных полей возможно будет и не одно в других случаях.


Sandman25   (2003-07-07 15:08:00) [10]

Если редактируется в DBGrid, то у него можно посмотреть SelectedField. В смысле в BeforeEdit проверить DBGrid1.SelectedField.FielName, и если оно запрещено для данного пользователя, то не давать редактировать.


alienka   (2003-07-07 14:58:00) [11]

наверное то, на котором курсор стоит? или активная запись в датасете. не знаю какой вариант верный..


Silver_   (2003-07-07 14:49:00) [12]


> Sandman25 © (07.07.03 13:10)
> Установите для всех нередактируемых полей свойство ReadOnly
> в True.

Не пойдет потому что и так могут быть поля в ReadOnly задаваемые в списке прав пользователя. В этом случае придется при скруллинге права смотреть. Это такой ТОРМОЗ будет :((

> ЮЮ © (07.07.03 13:32)
> А как программа отличает босса от других ?

При логине. У него права другие (например тока у данного юзера это поле редактируемое). Хочу отойти от варианта DataSet.Fields[i].ReadOnly := ...потому что хочу делать проверку перед попыдкой записи, ведь можно послать сообщение (мной не известное, а значит не перекрытой) моей проге и любое поле станет редактируемое :(, поэтому с самого начала не хочу привязываться к данному методу.


> Например в DataSet.AfterScroll

С таким же успехом можно поставить Field.OnChange тогда-то уж я точно какое поле редактирую

ЗЫ. Надо именно в ADODataSetBeforeEdit тем более у меня там есть еще проверок море. Ниужели нельзя узнать какое поле питаюсь редпктировать?


ЮЮ   (2003-07-07 13:32:00) [13]

А как программа отличает босса от других ?

Например в DataSet.AfterScroll

DataSet.Fields[0].ReadOnly := <не шеф>

DataSet.Fields[i].ReadOnly := DataSet.Fields[0].Value = "да";


Sandman25   (2003-07-07 13:10:00) [14]

Установите для всех нередактируемых полей свойство ReadOnly в True.


Silver_   (2003-07-07 12:59:00) [15]

Бос поставил задачу:
имеется таблица в которой одно поле редактируется исключительно администрацией (да/нет) если да эту запись можно редактировать, нет - Низя. Тока вот это самое поле можно редактировать в любом случае.

я и деляю:
...ADODataSetBeforeEdit...
If CurrField <> MyField then
if MyField then ShowMessage("Дать по рукам!!!");


вот и возникает вопрос как узнать CurrField, иначе и бос тож получит по рукам как все :о)


Romkin   (2003-07-07 12:56:00) [16]

Какое собираешься - такое и редактируй. Интересно, как это можно предсказать, какое поле пользователь будет менять?


Johnmen   (2003-07-07 12:47:00) [17]

Не знаю, что это такое :), но редактируется не поле, а запись.
Для событий, связанных с полем, см. именно их.


Наверх

Титульная страница Поиск, карта сайта Написать письмо