powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Datasnap.clientdataset и FDQuery вызивают "Field value required"
8 сообщений из 8, страница 1 из 1
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39560989
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Datasnap. Delphi 10.2, firebird 3
Процедура выбирает записи из бд клиентов и отправляет на сервер.

в while цикле с помощью FDQuery1 перебираю неотправленные записи, встаю в конце датасета cdsSelectCountry, а второй датасет (cdsInsertCountry) делает вставку и потом отправляется на сервер.

cdsCountry1-выбирает записи из бд клиента
cdsSelectCountry-чтобы узнать номер последней записи
cdsInsertCountry- вставка в конце

в обойх датасетах(cdsSelectCountry, FDQuery1) есть required поля и last и next вызивают исключение : "Field value required"

required:=false ничего не меняет. Что можно сделать?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
procedure Tclient.ButtonCountryClick(Sender: TObject);
var
n:integer;
begin
NullStrictConvert := false;

 DBGridClient.DataSource:=clientmodule1.dsCountry1;
 clientmodule1.cdsCountry1.Open;

 while not clientmodule1.FDQuery1.Eof do begin
   try
     clientmodule1.cdsSelectCountry.Open;  // для номера последней записи
     clientmodule1.cdsSelectCountry.last;
     n:=clientmodule1.cdsSelectCountry.FieldByName('Country_uid').AsInteger;
     clientmodule1.cdsSelectCountry.Append;
     clientmodule1.cdsSelectCountry.Edit;
     clientmodule1.cdsSelectCountry.FieldByName('Country_uid').AsInteger:=n+1;
     Clientmodule1.cdsInsertCountry.close;
     Clientmodule1.cdsInsertCountry.ParamByName('country_id').Value:=
                                   Clientmodule1.CdsCountry1.FieldByName('country_id').AsInteger;
     Clientmodule1.cdsInsertCountry.ParamByName('name').Value:=
                                   Clientmodule1.CdsCountry1.FieldByName('name').AsWidestring;
     Clientmodule1.cdsInsertCountry.ParamByName('Firmcode').Value:=
                                   Clientmodule1.CdsCountry1.FieldByName('firmcode').AsInteger;
     Clientmodule1.cdsInsertCountry.Execute;
 

     clientmodule1.FDQuery1.edit;
     clientmodule1.FDQuery1.FieldByName('tr').AsWidestring:='1';
     clientmodule1.FDQuery1.FieldByName('st').AsWidestring:='s';
     clientmodule1.FDQuery1.next;

   finally
   end;
 end;
clientmodule1.cdsInsertCountry.ApplyUpdates(-1);
end;
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561087
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне всегда было интересно, зачем пишут конструкцию

Код: pascal
1.
2.
3.
4.
try
...
finally
end;



Какой сакральный смысл в этом культе карго ?
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561096
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuв обойх датасетах(cdsSelectCountry, FDQuery1)cds через провайдера ссылается на этот FDQuery1?
bastibubuесть required поляу FDQuery1 созданы все персистентные в дизайне?
bastibuburequired:=false ничего не меняета у полей какого датасета меняешь?
bastibubuЧто можно сделать?предполагая что корень проблемы в FDQuery1 оттрейсить файрдак если так понять не удается отчего и какое поле он считает обязательным к заполнению
schiМне всегда было интересно, зачемвозможно чтобы дать повод таки засрать тред даже если по теме сообщить нечего? ;)
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561278
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavancds через провайдера ссылается на этот FDQuery1?
vavan , FDQuery1 для вывода данных из бд клиента:
Код: sql
1.
2.
3.
FDConnection1-->FDQuery1-->datasetProvider-->datasource-->свой cliendataset 
SqlConnection1--> ServerMethodInsert-->свой Provider--cdsInsertCountry-->datasource-->свой DBGrid 
SqlConnection1--> ServerMethodSelect-->свой Provider--cdsSelectCountry-->datasource-->свой DBGrid 



cdsInsertCountry-для вставки записей в clientdataset сервера.
что касается cdsSelectCountry вынужденная мера-придумал чтобы обойти вывод этой ощибки при append в clientdataset сервера. Поэтому clientmodule1.cdsSelectCountry.FieldByName('Country_uid').AsInteger:=n+1 даёт уникальный номер для Country_uid(unique, primary key) и потом уже не выводит ощибку Field value required.

Процедура работает приблизительно так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
procedure Tclient.ButtonCountryClick(Sender: TObject);
begin

открывает датасет клиента FDQuery1 ;

 while not датасет клиента( т.е. FDQuery1).Eof do begin
 
     clientmodule1.clientdataset сервера.open;
     clientmodule1.clientdataset сервера.last;
     n:=последный Country_uid.AsInteger;
     Append;
     Edit;
     Country_uid'.AsInteger:=n+1;
     
     потом идёт вставка в clientdataset сервера:
     Clientmodule1.cdsInsertCountry.close;
     Clientmodule1.cdsInsertCountry.ParamByName('country_id').Value:=
                                   Clientmodule1.CdsCountry1.FieldByName('country_id').AsInteger;
     Clientmodule1.cdsInsertCountry.ParamByName('name').Value:=
                                   Clientmodule1.CdsCountry1.FieldByName('name').AsWidestring;
     Clientmodule1.cdsInsertCountry.ParamByName('Firmcode').Value:=
                                   Clientmodule1.CdsCountry1.FieldByName('firmcode').AsInteger;
     Clientmodule1.cdsInsertCountry.Execute;
 

     в FDQuery1 клиента отметить что уже пересланы на сервер:
     clientmodule1.FDQuery1.edit;
     clientmodule1.FDQuery1.FieldByName('tr').AsWidestring:='1'; //переслан
     clientmodule1.FDQuery1.FieldByName('st').AsWidestring:='s'; //статус:=зафиксирован
     clientmodule1.FDQuery1.next;
 

     clientmodule1.cdsInsertCountry.ApplyUpdates(-1);
end;
    FDConnection1.applyUpdates([FDQuery1]);
end;

 
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561297
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavanbastibubuесть required поляу FDQuery1 созданы все персистентные в дизайне?
vavan , эти поля в бд required, not null. Fields Editor компонента FDQuery1 пустой или добавляю все поля (add all fields) и required:=false ничего не меняет.
тоже самое у clientdataset-а cdsSelectCountry.

bastibubuпредполагая что корень проблемы в FDQuery1

использование FDQuery была вынужденная мера после проблемы с клиентдатасетом.
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561324
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubu, иксепшн "Field value required" откуда прилетает? название поля там указано?
bastibubuFields Editor компонента FDQuery1 пустой или добавляю все поля (add all fields) и required:=false ничего не меняетоттрейсить и разобраться
bastibubuтоже самое у clientdataset-а cdsSelectCountrycds вообще пока исключи, он если открывается через провайдера то метаданные берутся из исходного датасета и на уровне полей cds задавать бесполезно
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561410
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavanbastibubu, иксепшн "Field value required" откуда прилетает? название поля там указано?
vavan , нет, не указано, но выдно что Country_uid (not null, Primary key таблицы сервера) добавляется и ругается на country_id(первычный ключ таблицы клиента). В принципе,в конкретном случае, можно на стороне сервера country_id.required:=false но ищу более обобщенное решение.
(см. фото)
...
Рейтинг: 0 / 0
Datasnap.clientdataset и FDQuery вызивают "Field value required"
    #39561554
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavan , ещё забыл сказать-
на кнопке закрепил оператор
Код: pascal
1.
clientmodule1.FDQuery1.next; 


и испольняется без ощибки!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Datasnap.clientdataset и FDQuery вызивают "Field value required"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]