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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2015, 12:45   #1
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию Хранимая процедура с входными и выходными параметрами FireBird+Delphi

Здравствуйте! Кучу всего перечитала, но не могу понять в чем проблема... Помогите разобраться, пожалуйста
есть хранимая процедура
Код:
create or alter procedure CHECK_ABONENT (
    CHECK_PHONE char(10))
returns (
    ID integer,
    LASTNAME char(10),
    NAME char(10),
    SECONDNAME char(10),
    ACCOUNT char(10))
as
begin
for select Abonentu.ID, Abonentu.LastName, Abonentu.Name, Abonentu.SecondName, Accounts.Account
  from Abonentu, Accounts
  where Accounts.IDab IN (select idac from phones where phone = :Check_Phone)
  AND  Accounts.idab = Abonentu.id
  into :ID, :LastName, :Name, :SecondName, :Account
do suspend;
end
При запуске в IBExpert все работает

вот код вызова ее в Delphi и обработка возвращаемых значений
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Check_Abonent.ParamByName('check_phone').asString:=Edit1.text;
Check_Abonent.ExecProc;
   if Check_Abonent.RecordCount>0 then
  begin
    Label5.Caption:=Check_Abonent.Current.ByName('LastName').AsString+
   Check_Abonent.Current.ByName('Name').AsString+
    Check_Abonent.Current.ByName('SecondName').AsString+
    Check_Abonent.Current.ByName('Account').AsString;
   end
   else
  Label5.Caption:='Нет такого абонента';
end;
Check_Abonent - компонент IBStoredProc

Проблема в том, что ничего не возвращается. Т.е. чтобы я не вводила в Edit, в итоге в любом случае выдает, что нет такого абонента
yulia вне форума Ответить с цитированием
Старый 28.05.2015, 13:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Осмелюсь предположить:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Check_Abonent.sql.text:='select * from CHECK_ABONENT(:check_phone)';
Check_Abonent.ParamByName('check_phone').asString:=Edit1.text;
Check_Abonent.open;
   if not Check_Abonent.eof then
  begin
    Label5.Caption:=Check_Abonent.Current.ByName('LastName').AsString+
   Check_Abonent.Current.ByName('Name').AsString+
    Check_Abonent.Current.ByName('SecondName').AsString+
    Check_Abonent.Current.ByName('Account').AsString;
   end
   else
  Label5.Caption:='Нет такого абонента';
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2015, 13:10   #3
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

спасибо, но нет ((( там почему-то просто пусто... если убрать это условие, то оно выводит просто пустую строку
yulia вне форума Ответить с цитированием
Старый 28.05.2015, 13:52   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
если убрать это условие
Какое это? Вы код от Виталия вообще пробовали? И там IBQuery вместо IBStoredProc, наверно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.05.2015 в 13:56.
Аватар вне форума Ответить с цитированием
Старый 28.05.2015, 14:19   #5
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Какое это? Вы код от Виталия вообще пробовали? И там IBQuery вместо IBStoredProc, наверно
Да, прошу прощения, не обратила внимания, что на Query изменено. Но через него я тоже пробовала вот таким способом, но тогда выдает что Empty SQL Statement.

у IBQuery DataSourse1 установлено, а у того в свою очередь DataSet вот эта хранимая процедура Check_abonent/ Может тут что-то не правильно? Чувствую, что в каком-то нюансе проблема, но не могу разобраться в каком ((
yulia вне форума Ответить с цитированием
Старый 28.05.2015, 14:22   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Check_Abonent - компонент IBStoredProc
Вы процедуру не вызивайтес . Приамо передайте ему параметр .... Я делаю так и работаеть ... смотрите
1) Таблица
Код:
---------------  Рейсы   -------

create table Voyages
(v_id integer not null, 
 v_alias varchar(35) not null,-- Код рейса автобусная компания
 v_aircarrier varchar(40) not null, -- Автобусная компания
 v_aircaraft varchar(40) not null, -- Модель автобуса 
 v_capacity INTEGER not null,  -- Вместимость 
 v_Departure_Time TIMESTAMP default  CURRENT_TIMESTAMP, --"Время отправления" Тип данных для хранение (датаи и время) по дефаулте  (текущая дата и время)
 v_Arrival_Time  TIMESTAMP default  CURRENT_TIMESTAMP, -- Время Прибытия
 v_departure_id integer , --Пункт отправления
 v_arrival_id integer -- FK
);
2) Процедур на INSERT
Код:
CREATE OR ALTER procedure VOYAGESINSERT (
    PR_V_ALIAS varchar(35),
    PR_V_AIRCARRIER varchar(40),
    PR_V_AIRCARAFT varchar(40),
    PR_V_CAPACITY integer,
    PR_V_DEPARTURE_TIME timestamp,
    PR_V_ARRIVAL_TIME timestamp,
    PR_V_DEPARTURE_ID integer,
    PR_V_ARRIVAL_ID integer)
as
begin
INSERT INTO  Voyages
(v_alias,
 v_aircarrier,
 v_aircaraft,
 v_capacity,
 v_Departure_Time,
 v_Arrival_Time,
 v_departure_id,
 v_arrival_id)
VALUES
(
    :pr_v_alias ,
    :pr_v_aircarrier ,
    :pr_v_aircaraft,
    :pr_v_capacity,
    :pr_v_Departure_Time,
    :pr_v_Arrival_Time,
    :pr_v_departure_id,
    :pr_v_arrival_id
);
end
3) из Delphi вызиваю и передаю параметр
xxbesoxx вне форума Ответить с цитированием
Старый 28.05.2015, 14:23   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Код:
 with DM.ibstrdprcVoyages do  // ibstrdprcVoyages IBStoredProc
      begin
        StoredProcName :='VOYAGESINSERT'; -- Имя процедур ! На РЕРхни Регистре 
        Prepare;
          ParamByName('PR_V_AIRCARRIER').Value := Trim(frmVoyagesAddEdit.edtv_aircarrier.Text);
          ParamByName('PR_V_ALIAS').Value :=  Trim(frmVoyagesAddEdit.edtv_alias.Text); // Trim(frmVoyagesAddEdit.edtv_alias.Text) форма и Edit
          ParamByName('PR_V_AIRCARAFT').Value := Trim(frmVoyagesAddEdit.edtv_aircaraft.Text);
          ParamByName('PR_V_CAPACITY').Value:=  Trim(frmVoyagesAddEdit.edtv_capacity.Text);
          ParamByName('PR_V_DEPARTURE_TIME').Value := frmVoyagesAddEdit.dtpv_Departure_Time.DateTime;
          ParamByName('PR_V_ARRIVAL_TIME').Value := frmVoyagesAddEdit.dtpv_Arrival_Time.DateTime;
          ParamByName('PR_V_DEPARTURE_ID').Value := DM.ibqryDestinations.FieldByName('DESTINATIONS_ID').AsInteger;
          ParamByName('PR_V_ARRIVAL_ID').Value := 2;
        ExecProc;
        DM.ibtrnsctnVoyages.Commit; // DM.ibtrnsctnVoyages = IBTransaction1 
      end;
      DM.ibtrnsctnVoyagesOPEN; // после Commit открываю  IBQuery1 . ibtrnsctnVoyagesOPEN =процедура на делфи
Я думаю как то поможеть
xxbesoxx вне форума Ответить с цитированием
Старый 28.05.2015, 14:34   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у IBQuery DataSourse1 установлено
Тоесть? У тебя IBQuery получается подчиненный что ли?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2015, 14:47   #9
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Тоесть? У тебя IBQuery получается подчиненный что ли?
Вот!!!! Я знала, что где-то просто протупила.. спасибо огромное!!! Все работает, когда убрала этот датасет
yulia вне форума Ответить с цитированием
Старый 28.05.2015, 15:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А зачем ты его поставила? О_о
Master-Detail нужно?
Тогда для таких вызовов еще один отдельный IB компонент заведи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выходными параметрами. Budyaga БД в Delphi 0 08.08.2010 18:57
Хранимая процедура для Firebird Lait1989 БД в Delphi 1 15.05.2010 11:02
Хранимая процедура FireBird Gurt87 БД в Delphi 3 27.01.2010 13:31
хранимая процедура(firebird) alex_-87 БД в Delphi 8 03.01.2010 14:59
Задачи с входными и выходными файлами Zinder Помощь студентам 3 05.03.2009 22:15