Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-100684
Schummi
2003-07-14 08:30
2003.07.31
PByte


11-100653
Bartov
2002-11-26 20:44
2003.07.31
KOL - Делфи7 (Посмотрите все)


3-100612
DmitryNekl
2003-07-09 20:51
2003.07.31
ADO, EXCEL и типы данных.


1-100799
Checist [root]
2003-07-17 11:56
2003.07.31
Ячейки DrawGrid


3-100562
Kati
2003-07-08 12:03
2003.07.31
Индексация таблиц.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский