Форум: "Базы";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c