Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1175169498
Kolan
2007-03-29 15:58
2007.04.29
Опрос для пользователей DMClient.


15-1175667538
alien1769
2007-04-04 10:18
2007.04.29
Не могу открыть ворд документ


3-1171277582
petvv
2007-02-12 13:53
2007.04.29
insert into <....> select <...> union select <...> = грабли


3-1171270785
<rm>
2007-02-12 11:59
2007.04.29
формирование страницы Excel


3-1171286284
bafy
2007-02-12 16:18
2007.04.29
Ошибка при вызове метода OpenDatabase





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский