Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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])




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.025 c
3-80437           Sewix                 2002-02-27 14:08  2002.03.25  
Как подключить данные из Access в Delphi


1-80500           DimaIv                2002-03-12 08:54  2002.03.25  
В папке на ряду с другими файлами проекта находится файл


1-80577           A.H.                  2002-03-10 00:20  2002.03.25  
Градусы


1-80571           BofA                  2002-03-09 16:00  2002.03.25  
Как дописать данные в начало файла?


1-80621           dimonf                2002-03-11 21:07  2002.03.25  
Господа, подскажите, как можно добавлять строки в StringGrid в цикле не зная заранее, сколько у меня, будет записей?