Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2008, 10:54   #1
Алёна
Форумчанин
 
Аватар для Алёна
 
Регистрация: 11.03.2007
Сообщений: 149
Стрелка Interbase, добавление записи

привет всем! вобщем возникла проблема при добавлении записи в базу, раньше использовала 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????
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Старый 12.03.2008, 11:22   #2
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Не получается просто заменить компоненты на интербейсовские ?
А смысл же будет такой же, как в вашем коде, думаю так.
Gauss вне форума Ответить с цитированием
Старый 12.03.2008, 12:01   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Commit, Rollback и другие операции с транзакциями осуществляются помоему через IBTransaction, а не через IBDatabase. ну есть хотя у базы свойство что-то вроде DefaultTransaction через него и можно до транзакции достукиваться, но это только если у вас все на одной транзакции. там, если мне не изменяет память, на каждый компонент своя транзакция внутри одной базы может быть.
так что надо что-то вроде:
storedProc1.Transaction.Commit и т.д. писать, чтобы не получилось, что не ту транзакцию подтверждаете
pu4koff вне форума Ответить с цитированием
Старый 12.03.2008, 13:23   #4
Алёна
Форумчанин
 
Аватар для Алёна
 
Регистрация: 11.03.2007
Сообщений: 149
Счастье

Цитата:
Сообщение от Gauss Посмотреть сообщение
Не получается просто заменить компоненты на интербейсовские ?
А смысл же будет такой же, как в вашем коде, думаю так.
меняла конечно, но не то......
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Старый 12.03.2008, 19:58   #5
Алёна
Форумчанин
 
Аватар для Алёна
 
Регистрация: 11.03.2007
Сообщений: 149
По умолчанию

ну помогите люди! не хочу я этот гребаный БДЕ.....неужели никто не добавлял записи в Интербэйс?
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Старый 14.03.2008, 12:38   #6
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Тебеж написали IBTransaction юзай. Цепляешь его к IBDatabase и вперёд:
IBTransaction.StartTransaction;
IBTransaction.Commit;
.......
Domovoy вне форума Ответить с цитированием
Старый 15.03.2008, 13:20   #7
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

dm1.Database1.StartTransaction; Заменить на dm1.IBTransaction1.StartTransaction ; Вместо IBTransaction1 подставить компонент транзакции который связан с storedProc1.
Соответственно
dm1.Database1.Commit;
dm1.Database1.RollBack;
заменить на
dm1.IBTransaction1.Commit;
dm1.IBTransaction1.RollBack;
Rik вне форума Ответить с цитированием
Старый 15.03.2008, 13:57   #8
Алёна
Форумчанин
 
Аватар для Алёна
 
Регистрация: 11.03.2007
Сообщений: 149
Радость

спасибо всем, уже разобралась....только фишка еще есть что ниже Interbase 6-ки не работает это дело я пользуюсь 5-кой, семерка че то не нравится.... тепрь ищу 6-ку
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Старый 15.03.2008, 19:55   #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;
Если это глупо, но работает, значит это не глупо.
Алёна вне форума Ответить с цитированием
Старый 25.03.2008, 11:54   #10
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

dm.IBQFirm.Close;//вот тут стопорится
dm.IBQFirm.Open;
Это наверно для того чтобы набор данных обновить после того как фирму добавила?
В этом случае Commit лучше делать до этих строк а не после.
Компоненты ibstoredProc1 и IBQFirm, если они оба привязаны к одной транзакции IBTransaction1, рассади по разным транзакциям. Для длинных транзакций для запросов типа Select, используй одну транзакцию, для коротких типа Insert Update Delete, используй другую.

Когда стопорится, что пишет?

А, да, не парся с InterBase, пересаживайся на FireBird, отличная работает на разных платформах и совершенно бесплатный, не пожалеешь, ни каких заморочек с лицензиями.
Rik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записи.... 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