Текущий архив: 2005.08.07;
Скачать: CL | DM;
Вниз
DataSet.Fields.Fields[i].Required Найти похожие ветки
← →
jonny210 © (2005-06-30 21:24) [0]Помогите плз. Нужно при добавлении/обновлении записи узнать все ли required поля заполнены.
DataSet.Fields.Fields[i].Required всегда false. Что я делаю не так???
← →
Desdechado © (2005-06-30 21:30) [1]в dbExpress-компонентах это можно проверить через указание
SQLDataSet.GetMetadata:=True
← →
Jonny210 © (2005-06-30 21:52) [2]> Desdechado © (30.06.05 21:30) [1]
>
> в dbExpress-компонентах это можно проверить через указание
> SQLDataSet.GetMetadata:=True
У DataSet"а такого свойства нет. (((
← →
evvcom © (2005-07-01 08:42) [3]Если DataSet какой-нибудь Table, то еще можно как-то вытянуть обязательность заполнения полей из системных таблиц. Если же это какой-нибудь Query или StoredProc, да и если Table, но фактически подцепляющий вьюху, то надо что-то мудрить на сервере, чтобы это как-то определять.
← →
Slym © (2005-07-01 08:52) [4]
procedure TDM.ValidateTable(DataSet: TDataSet;const AName:string="");
var
Name:string;
Strings:TStringList;
DS:TADODataSet;
i:integer;
s:string;
begin
if AName<>"" then Name:=AName else Name:=DataSet.Name;
Strings:=TStringList.Create;
try
DS:=TADODataSet.Create(nil);
try
Conn.OpenSchema(siColumns,EmptyParam,EmptyParam,DS);
for i:=0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields[i].IsNull and not DataSet.Fields[i].ReadOnly then
begin
if not DS.Locate("TABLE_NAME;COLUMN_NAME",VarArrayOf([Name,DataSet.Fields[i].FieldName]),[]) then
Continue;
if DS.FieldByName("IS_NULLABLE").AsBoolean then Continue;
s:=DS.FieldByName("DESCRIPTION").AsString;
if Length(s)>0 then
Strings.Add("""+s+""");
end;
end;
finally
DS.Free;
end;
if Strings.Count>0 then
begin
Strings.Insert(0,"Не заполнены обязательные поля:");
Application.MessageBox(Strings.GetText,"Ошибка!",MB_ICONERROR);
Abort;
end;
finally
Strings.Free;
end;
end;
procedure TDM.TableBeforePost(DataSet: TDataSet);
begin
ValidateTable(DataSet);
end;
← →
evvcom © (2005-07-01 10:24) [5]
> Slym © (01.07.05 08:52) [4]
См. [3]. Это будет работать только с таблицами, причем я не проверял всю логику работы этого метода. Если же работать с хранимками, запросами или вьюхами, то работать не будет.
← →
Ega23 © (2005-07-01 10:48) [6]Вот ещё одно косвенное подтверждение вредности всяческих ApplyUpdates
← →
evvcom © (2005-07-01 10:55) [7]
> Вот ещё одно косвенное подтверждение вредности всяческих
> ApplyUpdates
Эти ApplyUpdates тоже с умом надо использовать. Если делается пользовательский ввод, то есть смысл ApplyUpdates делать сразу при посте.
← →
Ega23 © (2005-07-01 10:57) [8]С умом надо использовать абсолютно ВСЁ.
"Иначе всё у нас пойдёт через ж..." (с) ДМБ
← →
Desdechado © (2005-07-01 11:04) [9]автор так и не понял, что надо указать компоненты доступа, несмотря на мою недвусмысленную подсказку
← →
Anatoly Podgoretsky © (2005-07-01 11:31) [10]evvcom © (01.07.05 10:55) [7]
В таком случае смысл Cached Updates как бы исчезает.
← →
jonny210 © (2005-07-01 12:41) [11]Спасибо Slym ©!!! Его код работает 100%
← →
evvcom © (2005-07-01 13:13) [12]
> В таком случае смысл Cached Updates как бы исчезает.
Согласен. Но без Cached Updates в давние времена я так и не смог заставить работать TStoredProc с TUpdateSQL. Недавно этот вопрос поднимался, в обсуждении участвовал кто-то из мастеров, уже не помню, кто именно, и я еще раз убедился, что без Cached Updates эта связка работать не будет.
Страницы: 1 вся ветка
Текущий архив: 2005.08.07;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.046 c