Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с IBStoredProc 
V
    Опции темы
EvoEvo
Дата 21.3.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Всем привет!
пишу вот такой код для выполнения хранимой процедуры базы:
Код

procedure TInputFormClient.Button1Click(Sender: TObject);
begin
 OutputFormClient.IBStoredProc1.Prepare;
   OutputFormClient.IBStoredProc1.Params.ParamByName('id').Value:='1';
 OutputFormClient.IBStoredProc1.ExecProc;

при запуске приложения пишет вот такую ошибку:  Dinamic SQL Error. Parameter mismatch for procedure FIRST_PROC
В компоненте IBQuery в SQL пишу :    select* FROM FIRST_PROC   - может тут что не правильно? (FIRST_PROC - имя хранимой процедуры)
PM MAIL   Вверх
EvoEvo
Дата 22.3.2008, 04:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



все. С IBStoredProc мне сказали - она здесь не подходит, так как нужно возвращать параметры, а она их не возвращает (или мне не правильно подсказали?)
Переделал на IBQuery, но и тут возникли проблемы.
Не пойму, что писать в параметре SQL - если пишу SELECT* from FIRST_PROC  , то она выдает ошибку   Dinamic SQL Error. Parameter mismatch for procedure FIRST_PROC.
процедура в Delphi:
Код

procedure TInputFormClient.Button1Click(Sender: TObject);
begin
 IBQuery1.SQL.Text := 'execute procedure FIRST_PROC :id';
IBQuery1.ParamByName('id').Value := Edit1.Text;
  OutputFormClient:=TOutputFormClient.Create(self);    {создаем форму}
  IBQuery1.Open;                  {открываем набор данных}
OutputFormClient.ShowModal;                      {отображаем форму на экране}

ID - входной параметр, но есть еще выходные параметры- нужно ли их где-нибудь прописывать? 

вот сама хранимая процедура в SQL:
CREATE PROCEDURE FIRST_PROC (
    id integer)
returns (
    f_name varchar(20),
    l_name varchar(20),
    s_name varchar(20),
    n_cheta integer,
    type_cheta varchar(20),
    money integer)
as
BEGIN
  FOR
  
    SELECT CLIENTS.F_NAME, CLIENTS.L_NAME, CLIENTS.S_NAME, CHETA.N_CHETA, CHETA.TYPE_CHETA, CHETA.MONEY
    FROM CLIENTS, CHETA
    WHERE CHETA.ID_CLIENTS=:ID And CHETA.ID_CLIENTS=CLIENTS.ID_CLIENTS
    INTO :F_NAME,
         :L_NAME,
         :S_NAME,
         :N_CHETA,
         :TYPE_CHETA,
         :MONEY
  DO
  BEGIN
   Suspend;
  END

END
PM MAIL   Вверх
Alex
Дата 22.3.2008, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Код

 IBQuery1.SQL.Text := 'select * from FIRST_PROC(:id)';
IBQuery1.ParamByName('id').Value := Edit1.Text;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
EvoEvo
Дата 22.3.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Никак не хочет выводить нужные результаты - выводит пустые поля в таблице. Но если явно задаю входной параметр в Params у IBQuery, то работает. Подскажите как это поправить ?


Это сообщение отредактировал(а) EvoEvo - 22.3.2008, 12:29
PM MAIL   Вверх
Alex
Дата 23.3.2008, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



А если так:
Код

IBQuery1.SQL.Text := 'select * from FIRST_PROC(:id)';
IBQuery1.ParamByName('id').Value := Edit1.Text;
IBQuery1.ExecSQL;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
EvoEvo
Дата 23.3.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 13.2.2008

Репутация: нет
Всего: нет



Цитата(Alex @ 23.3.2008,  08:24)
А если так:
Код

IBQuery1.SQL.Text := 'select * from FIRST_PROC(:id)';
IBQuery1.ParamByName('id').Value := Edit1.Text;
IBQuery1.ExecSQL;

ну почти так...
я сделал вот так, чтобы он возвращал параметры:
[
Код

IBQuery1.SQL.Text := 'select * from FIRST_PROC(:id)';
IBQuery1.ParamByName('id').Value := Edit1.Text;
IBQuery1.Open;

И еще нужно было зайти в Project->Options и переместить нужную форму в левую сторону ... после этого все заработало!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.