Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.027 c
14-1121752401
SLP
2005-07-19 09:53
2005.08.07
Графический компонент для отображения направления и силы ветра


1-1121783348
Андрей Жук
2005-07-19 18:29
2005.08.07
Многоколоночный TreeView - реализации


14-1121339167
alex-drob
2005-07-14 15:06
2005.08.07
Delphi 2005 не могу скомпилировать


4-1118140335
Андрей Жук
2005-06-07 14:32
2005.08.07
Функция, обратная wsprintf


3-1119858508
Mamed
2005-06-27 11:48
2005.08.07
Report and Unicode