Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-67753
IronHawk
2003-07-08 15:20
2003.07.21
Приветствую Мастеров! Разноцветный текст в TMemo.


1-67808
Wetnose
2003-07-09 08:24
2003.07.21
BPL dependences


7-68080
Monak
2003-05-11 19:23
2003.07.21
Время...


14-68013
Фикус
2003-07-04 08:16
2003.07.21
Интересно, а кто был 20000000 посетителем? :)


1-67827
IronHawk
2003-07-07 12:48
2003.07.21
Приветствую Мастеров! Hint не полностью видного элемент в ListBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский