![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 11.03.2007
Сообщений: 149
|
![]()
привет всем! вобщем возникла проблема при добавлении записи в базу, раньше использовала BDE, теперь решила освоить вкаладку Interbase. Использую при подключнеии компоненты IBDatabase, IBQuery, DataSource, IBDataSet, IBStoredProc, IBTransaction. При БДЕ писала такой код на кнопку ДОБАВИТЬ ЗАПИСЬ:
begin IF (edit1.Text<>'') and (combobox1.Text<>'') and (edit2.Text<>'') then begin try dm1.Database1.StartTransaction;// здесь ругается with storedProc1 do begin UnPrepare; ParamByName('predpr').Value:= combobox1.Text; ParamByName('nazv_otdel').Value:= edit1.Text; ParamByName('adress').Value:= edit2.Text; Prepare; ExecProc; end; dm1.QuOtdel.Close; dm1.QuOtdel.Open; dm1.Database1.Commit;// здесь ругается edit1.Clear; edit1.SetFocus; application.MessageBox('Новая запись добавлена','', mb_OK ); except dm1.Database1.Rollback;// здесь ругается application.MessageBox('Произошел сбой! Повторите операцию.','', mb_OK ); end; end else begin application.MessageBox('Введите все данные.','', mb_OK ); combobox1.SetFocus; end; как изменить эти строки чтоб работала с компонентами Interbase???? Если это глупо, но работает, значит это не глупо.
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 26.11.2007
Сообщений: 235
|
![]()
Не получается просто заменить компоненты на интербейсовские ?
А смысл же будет такой же, как в вашем коде, думаю так. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Commit, Rollback и другие операции с транзакциями осуществляются помоему через IBTransaction, а не через IBDatabase. ну есть хотя у базы свойство что-то вроде DefaultTransaction через него и можно до транзакции достукиваться, но это только если у вас все на одной транзакции. там, если мне не изменяет память, на каждый компонент своя транзакция внутри одной базы может быть.
так что надо что-то вроде: storedProc1.Transaction.Commit и т.д. писать, чтобы не получилось, что не ту транзакцию подтверждаете |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 11.03.2007
Сообщений: 149
|
![]()
меняла конечно, но не то......
Если это глупо, но работает, значит это не глупо.
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 11.03.2007
Сообщений: 149
|
![]()
ну помогите люди! не хочу я этот гребаный БДЕ.....неужели никто не добавлял записи в Интербэйс?
![]() Если это глупо, но работает, значит это не глупо.
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 24.10.2007
Сообщений: 254
|
![]() ![]() IBTransaction.StartTransaction; IBTransaction.Commit; ....... |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
![]()
dm1.Database1.StartTransaction; Заменить на dm1.IBTransaction1.StartTransaction ; Вместо IBTransaction1 подставить компонент транзакции который связан с storedProc1.
Соответственно dm1.Database1.Commit; dm1.Database1.RollBack; заменить на dm1.IBTransaction1.Commit; dm1.IBTransaction1.RollBack; |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 11.03.2007
Сообщений: 149
|
![]()
спасибо всем, уже разобралась....только фишка еще есть что ниже Interbase 6-ки не работает это дело
![]() ![]() Если это глупо, но работает, значит это не глупо.
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 11.03.2007
Сообщений: 149
|
![]()
ввожу в одно поле значение , ему че то не нравится блин:
begin IF (edit1.Text<>'') then begin try dm.IBTransaction1.StartTransaction; with ibstoredProc1 do begin UnPrepare; ParamByName('firm_name').value:=edi t1.Text; Prepare; ExecProc; end; dm.IBQFirm.Close;//вот тут стопорится dm.IBQFirm.Open; dm.IBTransaction1.Commit; edit1.Clear; edit2.Clear; edit1.SetFocus; application.MessageBox('Íîâàÿ çàïèñü äîáàâëåíà','', mb_OK ); except dm.IBTransaction1.RollbackRetaining ; application.MessageBox('Ïðîèçîøåë ñáîé! Ïîâòîðèòå îïåðàöèþ.','', mb_OK ); end; end else begin application.MessageBox('Ââåäèòå âñå äàííûå.','', mb_OK ); edit1.SetFocus; end; Если это глупо, но работает, значит это не глупо.
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 28.07.2007
Сообщений: 361
|
![]()
dm.IBQFirm.Close;//вот тут стопорится
dm.IBQFirm.Open; Это наверно для того чтобы набор данных обновить после того как фирму добавила? В этом случае Commit лучше делать до этих строк а не после. Компоненты ibstoredProc1 и IBQFirm, если они оба привязаны к одной транзакции IBTransaction1, рассади по разным транзакциям. Для длинных транзакций для запросов типа Select, используй одну транзакцию, для коротких типа Insert Update Delete, используй другую. Когда стопорится, что пишет? А, да, не парся с InterBase, пересаживайся на FireBird, отличная работает на разных платформах и совершенно бесплатный, не пожалеешь, ни каких заморочек с лицензиями. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Добавление записи.... | Droid | БД в Delphi | 2 | 04.06.2008 15:50 |
Си и InterBase | Edimus | Общие вопросы C/C++ | 2 | 23.11.2007 16:32 |
InterBase | EdNovice | БД в Delphi | 1 | 11.05.2007 12:12 |
InterBase 6.5 | san4es | БД в Delphi | 0 | 12.12.2006 20:03 |