Копирование записей набора данных клиента в таблицу базы данных
Чего я пытаюсь добиться, чтобы вставить / скопировать записи из tClientDataSet в таблицу базы данных (база данных - Sybase ASA).
У меня также есть форма с сеткой cxgrid, в которой я могу видеть записи с компакт-дисков, поэтому я знаю, что в ней есть записи.
По нажатию кнопки я делаю следующее:
with dmData.cds do
begin
Close;
Open;
First;
while not (EOF) do
begin
dmData.qry1.Open;
dmData.qry1.Insert;
dmData.qry1.FieldByName('field1').AsString := dmData.cds.FieldByName('field1').AsString;
dmData.qry1.FieldByName('field2').AsString := dmData.cds.FieldByName('field2').AsString;
dmData.qry1.FieldByName('field3').AsString := dmData.cds.FieldByName('field3').AsString;
dmData.qry1.Post;
Next;
end;
end;
Я не получаю никаких ошибок после того, как это сделано, но при просмотре таблицы базы данных не вставляются записи.
Я не знаю, что я делаю неправильно, любая помощь будет высоко ценится.
1 ответ
Кажется, вы пытаетесь сделать работу, которая TClientDataSet
делает для вас. Чтобы все это работало, вам нужны три компонента:
- Экземпляр набора данных, способный общаться с вашим сервером данных, уже настроенный для этого
- Экземпляр
TDatasetProvider
ссылаясь на предыдущий набор данных, используяDataset
имущество - Экземпляр
TClientDataSet
ссылаясь на предыдущего провайдера, используяProviderName
имущество
После всех записей в TClientDataset
(CDS) были обновлены, вы звоните ApplyUpdates(0)
отправить их провайдеру. Когда вы вызываете этот метод, CDS создает пакет данных с именем Delta с записями, которые необходимо сохранить, и отправляет его поставщику.
Поставщик не знает, как сохранить записи, существующие в Delta, поэтому он работает с набором данных, который вы ему присвоили. Для каждой записи в дельте соответствующая операция выполняется над набором данных, поэтому сервер данных начнет получать команды.
В конце провайдер уведомляет CDS, что все в порядке (это называется согласованием), в конечном итоге возвращая ключи, сгенерированные во время операций вставки. Эти ключи появятся в CDS.
После этого состояние измененных записей будет очищено, чтобы не сообщать об ожидающих изменениях (что-то, чего не делал ваш код).
Я рекомендую вам прочитать больше о DataSnap, чтобы действительно освоить его. Помощь Delphi имеет достаточно информации об этом.