Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

где посмотреть значение констант dsEdit, dsInsert, ...   Найти похожие ветки 

 
Silver_   (2003-06-06 15:25) [0]

Искал в папке Дельфи текст "dsEdit =" ничего не нашел :о(


 
VMcL   (2003-06-06 15:30) [1]

>Silver_ © (06.06.03 15:25)

Пишем "dsEdit", жмём F1 и - о чудо! - видим "TDataSetState type", unit DB. Итак пишем в uses "DB", на dsEdit "Find Declaration" - строка №66 (у меня):

DataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);


 
Silver_   (2003-06-06 15:37) [2]


> DataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert,
> dsSetKey,
> dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue,
> dsBlockRead,
> dsInternalCalc, dsOpening);


это я и сам видел. Мкна интересует сему равно dsEdit в смысле

dsEdit = $a1 например


 
VMcL   (2003-06-06 15:38) [3]

Ord(dsEdit)


 
ladybird   (2003-06-06 15:39) [4]

я думаю Integer(dsEdit) = 2


 
Palladin   (2003-06-06 15:54) [5]


> Silver_ © (06.06.03 15:37)

да зачем тебе это?


 
Silver_   (2003-06-06 15:55) [6]

Удалено модератором
Примечание: Хорошо уговорил, тогда в Потрепаться


 
Palladin   (2003-06-06 15:58) [7]

да нет значений это enum тип... а значения присваиваются на этапе компиляции...


 
VMcL   (2003-06-06 15:59) [8]

>Silver_ © (06.06.03 15:55)

Чем не устраивает
If State in [dsEdit, dsInsert, ...] then ...

?


 
ladybird   (2003-06-06 16:01) [9]

пишите if State in [dsEdit, dsInsert, ...]


 
Sandman25   (2003-06-06 16:02) [10]

if State in [dsEdit, dsBrowse, dsInsert] then ...


 
Silver_   (2003-06-06 16:12) [11]


> Palladin © (06.06.03 15:54)


Так и думал что спросят :о)

Ладно так уж и быть открою секрет раствора :)
Дело в том что в моей проге есть таблица где хранятся права/ограничения пользователей на какие нибудь обьекты (например TDBGrid.ReadOnly:=False;, ...), а тут боса осенило хочу мол чтоб у пользователей были разные права на наборы данных типа только добавлять (без права редактирования), только редактировать (без права добавлять), может ещё че нибудь надумает - изза непредсказуемости шефа решил в таблицу прописать значения того самого State для последующей прверки.
беру все ограничения/права на данный НД пихаю в Set и наслаждаюсь
а иначе есль я пропишу в таблице не значение а "dsEdit", "dsInsert"
тогда придется что то такое делать
if PermissionsADODataSet.FieldByName("Value").Value = "dsEdit" then
MySet:=MySet + dsEdit
else
if PermissionsADODataSet.FieldByName("Value").Value = "dsInsert" then
MySet:=MySet + dsInsert
else ...


а уж пото наслаждаться, если после такого можно это так назвать, блин.


 
VMcL   (2003-06-06 16:16) [12]

>Silver_ © (06.06.03 16:12)

A := Ord(dsEdit); // A = число; напр., 2
B := TDataSetState(A); // B = dsEdit, как ни странно


 
Silver_   (2003-06-06 16:18) [13]


> If State in [dsEdit, dsInsert, ...] then ...

не устраивает, скажешь как так оформить:
If State in [1, 2, ...] then ...
устроит :о))

тут ActnMan.pas нашел например:
const
CM_ITEMSELECTED = CM_BASE + $0402;
CM_ITEMCLICKED = CM_BASE + $0403;
CM_ITEMKEYED = CM_BASE + $0404;
CM_SCROLLCLICKED = CM_BASE + $0406;
CM_RESETBAR = CM_BASE + $0409;
CM_ENTERMENULOOP = CM_BASE + $0410;

почему не могу найти то что мне нужно, где всё это дабро лежит!


 
Sandman25   (2003-06-06 16:20) [14]

>Silver_ © (06.06.03 16:12)

А если пользователь может и удалять, и редактировать, например?
Наверное, лучше устанавливать биты.



 
VMcL   (2003-06-06 16:21) [15]

>Silver_ © (06.06.03 16:18)

if Ord(State) in [1, 2, ...] then ...


 
Silver_   (2003-06-06 16:22) [16]


> VMcL © (06.06.03 16:16)

у тебя Ord(dsEdit), а у меня "dsEdit "
как быть?


 
Silver_   (2003-06-06 16:31) [17]


>
> А если пользователь может и удалять, и редактировать, например?

Вот УПРОЩЕННЫЙ пример
Таблица
User DataSet PermisiionValueText PermsValueNr
1 DS1 dsEdit 1
1 DS1 dsInsert 2
2 DS1 dsInsert 2
...

Юзер 2 имеет право ТОЛЬКО на вставку ([2]),
юзер 1 - и вставку и редактирование ([1, 2])


> VMcL © (06.06.03 16:21)
> >Silver_ © (06.06.03 16:18)
>
> if Ord(State) in [ 1, 2, ...] then ...

так где мне найти подчеркнутое чтоб написать в таблице, чтоб сформировать [ 1, 2, ...] чтоб сделать вышеуказаную проверку


 
VMcL   (2003-06-06 16:38) [18]

>Silver_ © (06.06.03 16:31)

Сделай массив:
const
DataSetStateArr: array [TDataSetState] of String = (
"dsInactive", "dsBrowse", ...);


 
NAlexey   (2003-06-06 16:50) [19]

>Silver_ ©
Сдается мне что ты запутался.
TMyEnum = (meFirst, meSecond, meThird);
И ты можешь ими пользоваться, хотя значений они не имеют.


 
Sandman25   (2003-06-06 16:54) [20]

Silver_ © (06.06.03 16:31)

У Вас ненормализованная форма - есть дублирование информации. Лучше сделать справочник
State Id
Insert 1
Update 2
Delete 3

а в таблицу записывать

User DataSet Id
1 DS1 1
1 DS1 2
2 DS1 1


 
Silver_   (2003-06-06 16:58) [21]

Ну да получил из:
DataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);


следующее

DataSetState = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

Но где присваиваются им значения был бы не прочь посмотреть :о)




 
icWasya   (2003-06-06 17:03) [22]

может это поможет
procedure EnumToList(TI:PTypeInfo;ST:TStrings);
Var
TD:PTypeData;
TK:TTypeKind;
TN:String;
I:Integer;
begin
TD:=GetTypeData(TI);
if TD<>Nil then begin
TK := TI.Kind;
TN := TI.Name;
ST.Clear;
if TK=tkEnumeration then begin
for I:=0 to TD.MaxValue do
ST.Add(GetEnumName(TI,I))
end;
end;
end;
// использовать
var
ST:TStrings;
ST:=TStringList.Cteate;

EnumToList(TypeInfo(DataSetState),ST);
for i:=0 to ST.Count-1 do begin
if ST[i] = ..... then begin
end
end;


 
Silver_   (2003-06-06 17:11) [23]


> Сдается мне что ты запутался.

Да ничего я не запутался. Как получить SET из кучи String. вы хотите сказать если в Таблице напишу "dsEdit " (обратите внимание на кавычки) дельфя поймет как dsEdit сомневюсь.


> У Вас ненормализованная форма - есть дублирование информации


> Вот УПРОЩЕННЫЙ пример


у меня какраз и идет
Users
Permissions
UsersPermissions

- IDUser
- ObjectName
- IDPermission
- PermissionValue


С этим все пучком. А вопрос не в этом.


 
ladybird   (2003-06-06 17:23) [24]

пишите в базу
Tbl.FieldByName(...).AsInteger := Ord(dsEdit);
Tbl.FieldByName(...).AsInteger := Ord(dsInsert);
потом читаем

var UserSet : set of TDataTDataSetState;
UserSet := [];
выбрали записи и формируем Set
while not Tbl.Eof() do
begin
UserSet := UserSet +
[TDataSetState(Tbl.FieldByName(...).AsInteger];
Next;
end;
и проверяем, где надо
if State in UserSet then ...


 
ladybird   (2003-06-06 17:23) [25]

Ошибся...
var UserSet : set of TDataSetState;


 
Silver_   (2003-06-06 17:24) [26]


> icWasya © (06.06.03 17:03)
> может это поможет


Да нет, я множество из ТАБЛИЦИ создаю и хотел сразу туда значения написать (цифры)и значения СРАЗУ в множество кидать

MySet:=MySet + PermissionsADODataSet.FieldByName("Value").Value;

а не проверять
if PermissionsADODataSet.FieldByName("Value").Value = "dsEdit" then
MySet:=MySet + dsEdit
// или MySet:=MySet + 2
else
if PermissionsADODataSet.FieldByName("Value").Value = "dsInsert" then
MySet:=MySet + dsInsert
// или MySet:=MySet + 2
else ...

разница я думаю очевидна

Да и потом нашел я эти значения (из проги сгенерил). Но хотел узнать где им ПРСВАИВЮТСЯ соответствующие значения чтоб на будующее знал где искать подобного рода инфу.


 
icWasya   (2003-06-06 17:26) [27]

в догонку

procedure EnumToList(TI:PTypeInfo;ST:TStrings);
Var
TD:PTypeData;
TK:TTypeKind;
TN:String;
I:Integer;
begin
TD:=GetTypeData(TI);
if TD<>Nil then begin
TK := TI.Kind;
TN := TI.Name;
ST.Clear;
if TK=tkEnumeration then begin
for I:=0 to TD.MaxValue do
ST.Add(GetEnumName(TI,I))
end;
end;
end;
// использовать
type
TDataSetStateSet=set of TDataSetState;
var
ST:TStrings;
Rights : TDataSetStateSet;
begin
ST:=TStringList.Cteate;
Rights:=[];
EnumToList(TypeInfo(TDataSetState),ST);
for i:=0 to ST.Count-1 do begin
if ST[i] = xx.Value then begin
Rights:=Rights + TDataSetState(i);
end
end;



 
Silver_   (2003-06-06 17:30) [28]


> ladybird © (06.06.03 17:23)
> пишите в базу
> Tbl.FieldByName(...).AsInteger := Ord(dsEdit);


С той тока разницой что циферки эти я пишу пока ручками прями в таблицу, и не знал какую именно циферки кому написать. Того то и спросил ГДЕ ПОСМОТРЕТЬ :о)



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

Форум: "Потрепаться";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.03 c
7-84811
Anatoliy
2003-04-16 14:24
2003.06.26
Как запретить остановку по Ctrl-C в консольном приложении?


3-83935
Rick_ua
2003-06-03 20:32
2003.06.26
DB2 & dbExpress


3-83939
alienka
2003-06-04 10:34
2003.06.26
как добавить в базу?


3-83870
Инна
2003-06-01 15:15
2003.06.26
excel-отчетность в Intranet и просто


3-84019
Alexei Sviridov
2003-05-30 22:41
2003.06.26
Poisk zapisi v Interbase table





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский