Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.09.2013, 20:00
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Последовательное выполнение запросов

Вот такая вот проблемка:
Нужно чтоб в поле P_CL_ID попадал только что созданный CL_ID

Код:
procedure TNew_Person.Button1Click(Sender: TObject);
var
Cl_idg : integer;

begin
with DataModule1.IBQuery9 do
begin
SQL.Text:='insert into CLIENT (CL_ID, CL_IS_VIP, CL_CLS_ID, CL_CREDIT_NUM) values (gen_id(GEN_CLIENT_ID,1), :CL_IS_VIP, :CL_CLS_ID, :CL_CREDIT_NUM)';
ParamByName('CL_IS_VIP').AsInteger:=0;
ParamByName('CL_CLS_ID').AsInteger:=0;
ParamByName('CL_CREDIT_NUM').AsInteger:=0;

Cl_idg:=DataModule1.CLIENT.FieldByName('CL_ID').AsInteger; // ВОТ ТУТ Я ЧТО-ТО НЕ ТАК ДЕЛАЮ, А ЧТО ПОНЯТЬ НЕ МОГУ...

with DataModule1.IBQuery7 do
begin
SQL.Text:='insert into PERSON (P_ID, P_NAME, P_BIRTHDATE, P_CL_ID) values (:P_ID, :P_NAME, :P_BIRTHDATE, :P_CL_ID)';
ParamByName('P_NAME').AsString:=Edit1.Text;
ParamByName('P_BIRTHDATE').AsString:=Edit2.Text;
ParamByName('P_CL_ID').AsInteger:=Cl_idg;
Transaction.StartTransaction;
ExecSQL;
Transaction.Commit;
Transaction.Active:=false;

end;
end;
Ответить с цитированием
  #2  
Старый 10.09.2013, 20:09
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Сделайте StepByStep (Debug-Mode) и посмотрите в каком месте ошибка.

На вскидку:

Для DataModule1.IBQuery9 не вызывается ExecSQL;
Ответить с цитированием
  #3  
Старый 10.09.2013, 20:15
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Тут не ошибка, а что-то не так работает, добавляется не тот CL_ID в поле P_CL_ID.
Сейчас попробую твоё предложение
Ответить с цитированием
  #4  
Старый 10.09.2013, 20:18
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Вот здесь:
не хватает DataModule1.IBQuery9.ExeSQL
Код:
// <<==
ExecSQL;
Transaction.Commit;
Transaction.Active:=false;
Ответить с цитированием
  #5  
Старый 10.09.2013, 21:29
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Uniq!
Вот здесь:
не хватает DataModule1.IBQuery9.ExeSQL
Код:
// <<==
ExecSQL;
Transaction.Commit;
Transaction.Active:=false;

Спасибо, но не то, он так же вставляет запись на которой стоит указатель, то есть на первой записи...
Ответить с цитированием
  #6  
Старый 11.09.2013, 08:12
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Используйте триггеры, если база не лажовая.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter