Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

ADODataSetDeforeEdit ----> Имя текущего поля   Найти похожие ветки 

 
Silver_ ©   (2003-07-07 12:44) [0]

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


 
Johnmen ©   (2003-07-07 12:47) [1]

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


 
Romkin ©   (2003-07-07 12:56) [2]

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


 
Silver_ ©   (2003-07-07 12:59) [3]

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

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


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


 
Sandman25 ©   (2003-07-07 13:10) [4]

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


 
ЮЮ ©   (2003-07-07 13:32) [5]

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

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

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

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



 
Silver_ ©   (2003-07-07 14:49) [6]


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

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

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

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


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

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

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


 
alienka   (2003-07-07 14:58) [7]

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


 
Sandman25 ©   (2003-07-07 15:08) [8]

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


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


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

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


 
Johnmen ©   (2003-07-07 15:40) [10]

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

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


 
Sandman25 ©   (2003-07-07 16:04) [11]

Silver_ © (07.07.03 15:26)

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


 
Silver_ ©   (2003-07-07 16:06) [12]


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

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

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

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


 
Anatoly Podgoretsky ©   (2003-07-07 16:09) [13]

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


 
Silver_ ©   (2003-07-07 16:56) [14]

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

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

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

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


 
Silver_ ©   (2003-07-07 18:00) [15]

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

|---|---|---|---|--
| 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.

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


 
Sandman25 ©   (2003-07-07 18:42) [16]

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


 
ЮЮ ©   (2003-07-08 03:19) [17]

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

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





Страницы: 1 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
1-100732
Fider
2003-07-19 12:07
2003.07.31
Соответствие строки шаблону


8-100845
AlexOld
2003-04-07 11:16
2003.07.31
Выделение мышью фрагмента на Canvas


3-100537
Fast
2003-07-10 23:15
2003.07.31
ADO+Excel а где TabelName?


1-100748
Z_man7777
2003-07-16 09:09
2003.07.31
Помогите с QuickReport-ом


14-100963
Orion2
2003-07-15 13:02
2003.07.31
Бесплатный хостинг