Главная страница
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.49 MB
Время: 0.046 c
3-1120213299
reticon
2005-07-01 14:21
2005.08.07
Добавление новой записи - Invalid variant type convertion


14-1121141992
DelphiN!
2005-07-12 08:19
2005.08.07
Как моей программе узнать, что под столом нажали на кнопку


14-1121430748
Igorek
2005-07-15 16:32
2005.08.07
Дельфимастер проснулся :)


10-1098875056
Николай
2004-10-27 15:04
2005.08.07
Проблема MS Access


9-1113891487
parovoZZ
2005-04-19 10:18
2005.08.07
Текстуры *dds