Вниз
Скачать: CL | DM;

Обновление TADODataSet из TClientDataSet   Найти похожие ветки 

← →
kreyl   (2005-12-20 23:44) [0]

Подскажите, пожалуйста, как обновить данные в базе из 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;

В изначально пустую таблицу данные добавить можно. Однако, если в гриде удалить всё и сказать сохранить, в базе ничего не меняется. При попытках добавить запись к уже имеющимся получаю ругань на повторяющиеся значения в индексе - очевидно, не удается именно что обновить данные.
Где засада?
Заранее спасибо :-)


← →
Nikolay M. ©   (2005-12-20 23:54) [1]


> Где засада?

В извращенном способе работы с CDS. "Создается временный...", "убивается..." - в каком Архангельском ты прочитал такую чушь?
Конечно, если ты будешь вручную формировать и исполнять инструкции DML в DataSetProvider.BeforeUpdateRecord, это будет временным решением в твоей ситуации, но ДНК не исправит.


← →
sniknik ©   (2005-12-21 00:13) [2]

тут ClientDataSet (как и скрипачь в кин дза-дза ;) не нужен совсем. только если специально для создания трудностей и геройского их после преодолевания... (намеки уже видны)


← →
kreyl   (2005-12-21 00:31) [3]

Большое спасибо, пошел читать ADO Demo.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.025 c
2-1138611240
Pit
2006-01-30 11:54
2006.02.19
Handle модуля процесса


2-1139037081
prep000
2006-02-04 10:11
2006.02.19
Как вставить в форму системное время?


2-1139064948
Shizik
2006-02-04 17:55
2006.02.19
Как сделать выравнивание по ширине в Memo?


15-1138348455
Курдль
2006-01-27 10:54
2006.02.19
Наследование в Visual Studio 2005 не работает?!


15-1138568857
Volf_555
2006-01-30 00:07
2006.02.19
Какой почтовик может работать через прокси-сервер с авторизацией?




   Наверх