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

Вниз

где посмотреть значение констант 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.017 c
8-84446
alvin
2003-03-10 07:29
2003.06.26
Обработка звука в реальном времени


14-84751
Странник
2003-06-04 16:32
2003.06.26
Очередной перл политкорректности


1-84422
IL
2003-06-09 16:22
2003.06.26
Вызов процедуры


14-84626
Soft
2003-06-04 16:51
2003.06.26
выпил шампанского, позанимался любовью - это медицинская услуга


3-83889
Levsha
2003-06-01 21:41
2003.06.26
Lookup field в DBgride, у когонить получалось???