Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизПостейший пример работы с IB. Как правильно? Найти похожие ветки
← →
Виталик 2007 (2007-02-12 16:49) [0]Здравствуйте, Мастера.
Вот у меня есть модальная форма, на которой находятся
DBEdit"ы, привязанные к IBTable и кнопочки Ok и Cancel.
Подскажите, как правильней её обрабатывать?
При ModalResult = mrOk делать Post и Commit, а иначе Cancel и Rollback? или Commit в любом случае?
Можно на примере этого кода:
trnCatalog.StartTransaction;
tblCatalog.Append;
frmAddEditItem.ShowModal;
if frmAddEditItem.ModalResult = mrOk then
begin
tblCatalog.Post;
end
else
begin
tblCatalog.Cancel;
end;
trnCatalog.Commit;
и ещё в ту же тему:
Если использовать IBQuery + IBUpdateSQL, то я после присоединения IBUpdateSQL в UpdateObject (и прописывания всех SQL) работаю с IBQuery как IBTable, т.е. просто вызываю
Append и Post или мне нужно делать IBUpdateSQL.Apply(ukInsert) ?
Запутался я что-то со всем этим.. %)
← →
Правильный Вася (2007-02-12 17:16) [1]"C:\Program Files\Borland\Delphi7\Demos\Db\IBX"
← →
MsGuns © (2007-02-12 17:36) [2]Все неправильно? начиная от
>привязанные к IBTable
и заканчивая
>и кнопочки Ok и Cancel.
← →
Виталик 2007 (2007-02-12 22:33) [3]
> Правильный Вася (12.02.07 17:16) [1]
> "C:\Program Files\Borland\Delphi7\Demos\Db\IBX"
Посмотрел. Ну ткните меня носом, где там пример простейшей работы..
> MsGuns © (12.02.07 17:36) [2]
> Все неправильно? начиная от>привязанные к IBTable и заканчивая>и
> кнопочки Ok и Cancel.
Такими постами можешь желание программировать убить напрочь.
Написал бы в чем именно ошибка
← →
Val © (2007-02-12 22:54) [4]в зависимости от того, что вам надо от этого кода.
post и cancel работают с буфером данных на клиенте, commit и rollback - с реальными данными в бд.
небольшой пример:try
...
меняем-меняем
...
q.post;
TA.commit;
except
if выводилка_сообщений("error while inserting\updating\deleting - cancel updates?") = mrOk then
q.cancel;
TA.rollback;
end;
← →
Виталик 2007 (2007-02-12 23:14) [5]
> Val © (12.02.07 22:54) [4]
> в зависимости от того, что вам надо от этого кода.post и
> cancel работают с буфером данных на клиенте, commit и rollback
> - с реальными данными в бд.
спасибо, кажется понял:)
т.е. если я сделаю Cancel а потом Commit (как в моём примере), то реально в базу не попадёт только последнее изменение?
← →
unknown © (2007-02-12 23:30) [6]
> Виталик 2007 (12.02.07 23:14) [5]
http://www.ibase.ru/devinfo/ibx.htm
← →
MsGuns © (2007-02-12 23:59) [7]>Вот у меня есть модальная форма
Модальный режим показа формы с гридом не рашает вопрос случайного (не намеренного) постинга, а это приводит к недоразумениям
>на которой находятся DBEdit"ы, привязанные к IBTable и кнопочки Ok и Cancel.
При работе с клиент-серверными БД можно использовать неявные изменения, но это надо делать грамотно. Новичкам не рекомендую до тех пор, пока не наступит более-менее ясное понимание механизма транзакций.
И что это за кнопки ? Почему нет ясных и однозначных "Записать", "Отменить" и т.д. ?
>Подскажите, как правильней её обрабатывать?
>При ModalResult = mrOk делать Post и Commit, а иначе Cancel и Rollback? или Commit в любом случае?
Вы путаете стандартные методы TDataSet (Edit,Post,Cancel, etc) с методами, "заточенными" под конкретную СУБД (сервер). Для начала необходимо разобраться как с TDataSet, так и с компонентами доступа к IB
Без этого глюки будут преследовать Вас, как блохи Жучку
>Можно на примере этого кода:
Можно ;)
>trnCatalog.StartTransaction;
>tblCatalog.Append;
Неверно методологически. Почему, - трудно объяснить человеку, не понимающему что такое "транзакция"
>frmAddEditItem.ShowModal;
if frmAddEditItem.ModalResult = mrOk then
begin
tblCatalog.Post;
end
else
begin
tblCatalog.Cancel;
end;
Вообще неясно кто на ком стоит. Если та самая "модалка" принимает решение, постить запись или нет, то почему бы ей самой и не подтвержать (отменять) изменения ? Если все решает гл.форма, а не та, в которой заполняются контролы с полями таблицы, то зачем тогда эти контролы db-aware ?
>trnCatalog.Commit;
???
Ваще песец. Даже после Cancel все равно Commit ? Я уж молчу о том, что постоянные "дергания" соединения в сети приведут к "чудесам" и сделают нормальную работу подобного приложения невозможной.
>и ещё в ту же тему:
Если использовать IBQuery + IBUpdateSQL, то я после присоединения IBUpdateSQL в UpdateObject (и прописывания всех SQL) работаю с IBQuery как IBTable, т.е. просто вызываю
Append и Post или мне нужно делать IBUpdateSQL.Apply(ukInsert) ?
Попробуйте "классический" вариант: читает одна транзакция (только умоляю Вас - забудьте про TIBTable, TIBStoredProc - уверяю, TIBDataSet+TIBQuery хватит с запасом, а чуть позднее поймете преимущества TIBSQL), правит другая. Для редактирования используйте не db-aware контролы. После заполнения и проверки корректности введенных данных динамический запрос на вставку (изменение) в таблицу (таблицы) и перечитка отображаемого датасета. Транзакции должны иметь "правильные" параметры, научиться задавать которые можно за пару часов чтения любого из мануалов в сети. И забудьте про UpdateObject - этк приблуду для любителей "гридного" редактирования. По крайней мере на некоторое время.
>Запутался я что-то со всем этим.. %)
Немудрено ;)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c