Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Постейший пример работы с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
15-1175453608
Cerberus
2007-04-01 22:53
2007.04.29
алгоритм анализа изображения....


2-1176182269
zhurik
2007-04-10 09:17
2007.04.29
Динамический массив как параметр в процедуре ?


2-1175717826
_Solo_
2007-04-05 00:17
2007.04.29
Ползунок


2-1176006783
Roman_S
2007-04-08 08:33
2007.04.29
Что выбрать: mail, ICQ, SMS, Socket…?


15-1175616972
И. Павел
2007-04-03 20:16
2007.04.29
Документация и бета тестирование