Форум: "Базы";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];
ВнизIBQuery и IBUpdateSQL как сделать ApplyUpdates корректным Найти похожие ветки
← →
Lucky (2003-06-15 12:32) [0]Я сделал справочник для IB все было нормально пока туда все добавлялось из DBGrid, в IBQuery CachedUpdate := True, после добавления я давал возможность пользователю либо сохранить изменения либо отменить, соответсвенно
{ Сохранение }
procedure TfmNalog.BitBtn3Click(Sender: TObject);
begin
CD.IBTransaction2.StartTransaction;
Try
IBQuery1.ApplyUpdates;
CD.IBTransaction2.Commit;
Except
CD.IBTransaction2.Rollback;
Raise;
End;
end;
{ Отмена измений }
procedure TfmNalog.BitBtn6Click(Sender: TObject);
begin
IBQuery1.CancelUpdates;
end;
Далее я решил добавить еще одну форму в которой будет производится редактирование (Чтобы не прям в DBGrid)
к фооме я обращаюсь при редактировании
procedure TfmNalog.BitBtn5Click(Sender: TObject);
begin
fmCNalog.Edit1.Text := DBGrid1.Fields[0].AsString;
fmCNalog.Edit2.Text := DBGrid1.Fields[1].AsString;
If fmCNalog.ShowModal = mrOk Then
Begin
IBUpdateSQL1.DataSet.Edit;
DBGrid1.Fields[0].AsString := fmCNalog.Edit1.Text;
DBGrid1.Fields[1].AsString := fmCNalog.Edit2.Text;
IBUpdateSQL1.DataSet.ApplyUpdates; { !!!!!! }
End;
end;
При добавлении
procedure TfmNalog.BitBtn1Click(Sender: TObject);
begin
IBUpdateSQL1.DataSet.Insert;
If fmCNalog.ShowModal = mrOk Then
Begin
IBUpdateSQL1.DataSet.Edit;
DBGrid1.Fields[0].AsString := fmCNalog.Edit1.Text;
DBGrid1.Fields[1].AsString := fmCNalog.Edit2.Text;
End;
end;
При добавлении все работает нормально, а при редактировании без
IBUpdateSQL1.DataSet.ApplyUpdates; { !!!!!! }
работает с косяками, а именно при редактировании одной записи все нормально, а если редактируешь несколько, то при сохранении возникает исключительная ситуация.
Можно конечно и с этой строкой, но тогда невозможно отменить изменения. Как этого избежать?
Короче требуется сделать форму на которой DBGrid, и 5 кнопок (Добавить, Изменить, Удалить, Сохранить, Отменить, Закрыть),
Добавить - выдает модалбное окно где можно добавить запись
Изменить - выдает тоже окно, но уже с заполнеными полями для редактирования
Удалить - удаляет запись
Сохранить - сохраняет введенные изменения
Отменить - отменяет введенные изменения с момента последнего сосхранения
Закрыть - закрывает форму.
Плжалуйста подскажите где прочесть или как сделать, заранее благодарен. Проблема большая.
Исползую Delphi7 и IB6.5
Спасибо!
← →
Zacho (2003-06-15 15:08) [1]Честно скажу, не очень внимательно вчитывался в твой пост.
Но могу дать несколько советов.
1. Не использовать TIBQuery - TIBDataSet и TIBSQL достаточно для всего, что только можно придумать, и потенциальных граблей меньше.
2. Не знаю, как в последних версиях IBX, но и в BDE и в IBX от Дельфи 6 в CachedUpdates есть баги. Совет - используй CachedUpdates только при крайней необходимости и тщательно протестировав, нормально ли все работает именно в твоем случае.
И вообще, зачем тебе CachedUpdates ? Почитай про транзакции.
3. Читай статьи на http://www.ibase.ru/develop.htm
4. IB 6.5 - странно... Неужели купленный ? А если нет, то не лучше ли поставить FB ?
← →
Lucky (2003-06-15 15:33) [2]2Zacho
>1. Не использовать TIBQuery - TIBDataSet и TIBSQL достаточно для всего, что только можно придумать, и потенциальных граблей меньше.
чего же тогда использовать?
>2. Не знаю, как в последних версиях IBX, но и в BDE и в IBX от Дельфи 6 в CachedUpdates есть баги. Совет - используй CachedUpdates только при крайней необходимости и тщательно протестировав, нормально ли все работает именно в твоем случае.
факт в том что это работает, но работает не до конца верно, про это я ничего не знаю, просто попался пример, где было реализованно именно так, а поскольку я никогда не писал ничего для IB, то смотрел только туды
Насколько я знаю механизм транзакций это всего лишь система поддержания целостности данных (может и ошибаюс :), мне надо сделать форму на которой DBGrid, и 5 кнопок (Добавить, Изменить, Удалить, Сохранить, Отменить, Закрыть),
Добавить - выдает модалбное окно где можно добавить запись
Изменить - выдает тоже окно, но уже с заполнеными полями для редактирования
Удалить - удаляет запись
Сохранить - сохраняет введенные изменения
Отменить - отменяет введенные изменения с момента последнего сосхранения
Закрыть - закрывает форму.
Трудное место для меня тут это сохранение и отмена - т.е. допустим изменили 10 записей, но не сохранили и тогда можно их отменить, но если сохранили, то нельзя, если кто-нить знает способ пусть скажет или даст ссылку где читать, вообще в нете так мало инфы по работе IB & Delphi, именно IB & Delphi, отдельно и по тому и по другому есть, а их взаимодействия мало :(((
Заранее благодарен!
← →
Lucky (2003-06-15 15:49) [3]2Zacho
>4. IB 6.5 - странно... Неужели купленный ? А если нет, то не лучше ли поставить FB ?
нет не купленный, он локал, был на диске с Delphi7, он мне нужен всего лишь чтобы научится, в данный момент я пишу диплом, поэтому мне вообще-то пофиг, но хотелось бы научится делать все по высшему классу
← →
Zacho (2003-06-15 16:08) [4]
> Lucky © (15.06.03 15:33)
> чего же тогда использовать?
TIBDataSet и TIBSQL. По крайней мере я только их и использую.
Действительно, TIBQuery и TIBTable для некоторых задач могут немного упростить работу. Но вообще-то они сделаны исключительно для перевода старых проектов с BDE или для облегчения возможного перевода проекта на другую СУБД и компаненты типа BDE. В общем случае, лучше использовать TIBDataSet и TIBSQL.
> факт в том что это работает, но работает не до конца верно...
Далее пропущено ...
Совет такой: сначало почитай что-нибудь по теории РСУБД (могу посоветовать К. Дж. Дейт "Введение в системы баз данных")
Потом можно что-нибудь по Дельфи и IB, например Ковязин, Востриков "Мир Interbase"; Шумаков, Фаронов "Delphi 5. Руководство разработчика баз данных". Можно ли найти это в сети - не знаю.
И обязательно - http://www.ibase.ru
> Сохранить - сохраняет введенные изменения
> Отменить - отменяет введенные изменения с момента последнего
> сосхранения
На "сохранить" - делай Commit или CommitReataining, в зависимости от задачи, а на "отменить" - Rollback или RollbackRetaining.
И сразу хочу дать хороший совет - транзакции, модифицирующие данные, или только читающие, но SNAPSHOT - должны быть как можно более короткими.
← →
Lucky (2003-06-28 01:39) [5]Спасибо, совсем разобрался - дело было в ссылочной целостности, как я мог про нее забыть. Кортежи не удалялись потому, что это были справочники, и каскадное удалениие не стояло - меня это и мучало почему одни записи удаляются, а другие нет.
Спасибо за советы, при случаи почитаю указанную литературу - вот только бы ее найти.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c