Форум: "Потрепаться";
Текущий архив: 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 + 2
MySet:=MySet + dsEdit
else
// или MySet:=MySet + 2
if PermissionsADODataSet.FieldByName("Value").Value = "dsInsert" then
MySet:=MySet + dsInsert
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