Главная страница
    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.038 c
15-1175375398
БарЛог
2007-04-01 01:09
2007.04.29
IE. подключение к нескольким серверам


2-1175944623
Ezorcist
2007-04-07 15:17
2007.04.29
a^b


15-1175518945
Kerk
2007-04-02 17:02
2007.04.29
Вопрос линуксоидам


2-1176275300
jeen
2007-04-11 11:08
2007.04.29
Как распечатать содержимое фрейма ?


15-1175546855
Linn
2007-04-03 00:47
2007.04.29
Сдавайте мусор дворнику, который накопился.





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