Форум: "Базы";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
ВнизТранзакция. Как это сделать? Найти похожие ветки
← →
UncleRu (2002-02-19 20:08) [0]Клиентская прога работает с IntreBase5.0. Провожу вставку записи в таблицу и отображение в DBGrid осуществляется только после завершеня транзакции, т.е. после Commit. Вот только это не годится каждый раз после вставки одной строки сразу данные пересылать на сервак. Надо выполнить ряд инсертов, а потом заслать все вставляемые записи завершением транзакции. Как сделать на Delphi5.0 так, чтобы до выполнения commit внесённые данные отображались в DBGrid, но при этом они не были отосланы на сервер? И возможно ли такое вообще?
← →
Иван Шихалев (2002-02-19 22:00) [1]1. Через какие компоненты работаешь?
2. Не должно вообще быть никаких проблем, если Grid и ввод данных сидят на одном DataSet.
← →
petr_v_a (2002-02-19 23:43) [2]>Надо выполнить ряд инсертов, а потом заслать все вставляемые >записи завершением транзакции
транзакция - понятие исключительно серверное, пока записи не "засланы", и коммитить, с точки зрения сервера, нечего, т.к. никаих insert/update не выполнялось.
>чтобы ... внесённые данные отображались в DBGrid, но при этом >они не были отосланы на сервер
у Dataset`а CachedUpdates=true, при этом все измения данных в dataset`е будут выполняться только в его внутренних(на клиенте!) буферах(RecordBuffers). Для "засылания" используйте dataset.ApplyUpdates, при этом изменения буферов будут скинуты в базу. А после этого для фиксации транзакции на сервере - commit
← →
UncleRu (2002-02-20 17:00) [3]To petr_v_a
Попробовал все ваши указания, но что-то не получается, а именно при отладке проверяю параметр UpdatesPending и он равен False, хотя CachedUpdates=true. Данные в DBGrid по прежнему не отображаются. Что я делаю не так и какое занчение желательно выставлять в BufferChunks?
← →
Johnmen (2002-02-20 17:18) [4]1. Через какие компоненты работаешь?
← →
Fareader (2002-02-20 18:11) [5]1. А ты подключил к Query компонент UpdateSql?
2. В UpdateSql сгенерировал SQL запросы на обновление?
3. Пользуешься одним и тем же Query для вставки и отображения в грид?
← →
UncleRu (2002-02-21 14:00) [6]Использую IBDataSet. В его свойствах DeleteSQL, InsertSQL, ModifySQL, SelectSQL и RefreshSQL написаны соответствующие запросы. CachedUpdates=true, UpdateRecordTypes все true.
Я вообще-то добился уже своего, но мне кажется что всё равно это не верно, видать при таком коде данные пересылаются в БД только без commit, а заметить это мне трудно так как сам сервак InterBase у меня же на машине и стоит и всё выполняется молниеносно... Может потом при эксплуатации и всплывут эти ошибки. Вот как это выглядит:
IBDSPatient.Close;
IBDSPatient.QInsert.Params.ByName("NAME").AsString :=
fmAddPacient.edFIO.Text;
case fmAddPacient.RadioGroup1.ItemIndex of
0: IBDSPatient.QInsert.Params.ByName("SEX").AsInteger:=1;
1: IBDSPatient.QInsert.Params.ByName("SEX").AsInteger:=0;
end; // case
IBDSPatient.QInsert.Params.ByName("birthday").AsString:=
DateToStr(fmAddPacient.DateTimePicker1.Date);
IBDSPatient.QInsert.Prepare;
IBDSPatient.QInsert.ExecQuery;
IBDSPatient.Open;
Через ApplyUpdates ничего не получается и параметр UpdatesPending почему-то False. Где здесь ошибка?
← →
Fareader (2002-02-21 16:20) [7]Нужно использовать IBUpdateSQL. В проперти IBDataset UPdateObject укажи IBUpdateSQL, а код на удаление, вставку и изменение напиши не в IBDataset, а в IBUpdateSQL
← →
UncleRu (2002-02-22 19:56) [8]Спасибо всем за советы... Буду пробовать.
← →
Alexon (2002-02-25 14:14) [9]Pobrobuj ispojzovatj ne IBDataSet.ApplyUpdates, a
IBDataBase.ApplyUpdates([IBDataSet])
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c