![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновление TADODataSet из TClientDataSet
kreyl © (2005-12-20 23:44:00)Подскажите, пожалуйста, как обновить данные в базе из TClientDataSet?
(Access + D2005) Есть таблица в Аксессе. Создается ADOConnection, через него к таблице подключается временный датасет, из него данные копируются в ClientDataSet. Потом временный датасет убивается, ADOConnection тоже убивается, затем на основе ClientDataSet через DataSource строится DBGrid.
DBGrid редактируется (соответственно, изменяя ClientDataSet); а потом нужно обновить данные в таблице базы. То есть внести в таблицу базы изменения, сделанные в ClientDataSet.
Пробовал так:
procedure SaveDataSet (TableName: string; DataSet: TClientDataSet);
var
ds: TADODataSet;
pr: TDataSetProvider;
begin
ds := TADODataSet.Create(nil);
pr := TDataSetProvider.Create(nil);
try
ds.Connection := ADOCon;
ds.CommandType := cmdTable;
ds.CommandText := TableName;
ds.Open;
pr.DataSet := ds;
DataSet.SetProvider(pr);
DataSet.ApplyUpdates(0);
finally
ds.Free;
pr.Free;
end;
end;
В изначально пустую таблицу данные добавить можно. Однако, если в гриде удалить всё и сказать сохранить, в базе ничего не меняется. При попытках добавить запись к уже имеющимся получаю ругань на повторяющиеся значения в индексе - очевидно, не удается именно что обновить данные.
Где засада?
Заранее спасибо :-)
kreyl (2005-12-21 00:31:00) [1]Большое спасибо, пошел читать ADO Demo.
sniknik (2005-12-21 00:13:00) [2]тут ClientDataSet (как и скрипачь в кин дза-дза ;) не нужен совсем. только если специально для создания трудностей и геройского их после преодолевания... (намеки уже видны)
Nikolay M. (2005-12-20 23:54:00) [3]
> Где засада?
В извращенном способе работы с CDS. "Создается временный...", "убивается..." - в каком Архангельском ты прочитал такую чушь?
Конечно, если ты будешь вручную формировать и исполнять инструкции DML в DataSetProvider.BeforeUpdateRecord, это будет временным решением в твоей ситуации, но ДНК не исправит.