Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Понять не могу....(делаю перенос данных из Dbase в Firebird)   Найти похожие ветки 

 
Koala   (2004-08-01 13:05) [0]

Есть ХП (которая возвращает ID_Avto):

CREATE PROCEDURE PR_OUT_ID_AVTO (
   IN_GNUM VARCHAR(15),
   IN_MARKA VARCHAR(30))
RETURNS (
   OUT_ID INTEGER)
AS
begin
for
 /* Procedure Text */
 SELECT GOS_NUM, MARKA_AVTO
 FROM TBL_REF_AVTO
 INTO :IN_GNUM, :IN_MARKA
do
    begin
      suspend;
    end
end

Вызываю ХП в программе

DM.pFIBSP_OUT_IDAvto.Prepare;
Try
  DM.pFIBTrans.StartTransaction;
    while not DM.tblRefNorm.Eof do
      begin
        DM.pFIBSP_OUT_IDAvto.Params[0].AsString := DM.tblRefNormGOS_NUM.AsString;
        DM.pFIBSP_OUT_IDAvto.Params[1].AsString := DM.tblRefNormMARKA_AVTO.AsString;
        DM.pFIBSP_OUT_IDAvto.ExecProc;
        DM.pFIBSP_REF_FUELMAPE.Params[0].AsDate := DM.tblRefNormDATA_NORM.AsDateTime;
        DM.pFIBSP_REF_FUELMAPE.Params[1].AsInteger := DM.pFIBSP_OUT_IDAvto.ParamValue("OUT_ID").AsInteger; (сдесь ругается параметр OUT_ID не существует)
       
......
        dm.pFIBSP_REF_FUELMAPE.ExecProc;
      end;
  DM.pFIBTrans.Commit;
except
  DM.pFIBTrans.Rollback;
end;
 

Что я не так делаю и как правильно????


 
Guest   (2004-08-01 13:10) [1]

описание ошибки есть?


 
Koala   (2004-08-01 13:20) [2]

Project Converter.exe raised exception class Exception with message "Параметр "OUT_ID" не существует в DM.pFIBSP_OUT_IDAvto". Process stoped


 
}{ander ©   (2004-08-01 13:26) [3]

В ХП параметру OUT_ID ничего не присваивается, хотя он заявлен, как выходной.


 
Guest   (2004-08-01 13:29) [4]

SELECT OUT_ID = (SELECT GOS_NUM, MARKA_AVTO
FROM TBL_REF_AVTO
INTO :IN_GNUM, :IN_MARKA)

or

set OUT_ID = (SELECT GOS_NUM, MARKA_AVTO
FROM TBL_REF_AVTO
INTO :IN_GNUM, :IN_MARKA)
в сиквеле что-то типа тогоко наверное и в IB так.. :)


 
Koala   (2004-08-01 13:31) [5]

Вот и я понять не могу... где у меня ошибка, почему я не получаю возвращение от ХП параметра OUT_ID и не могу подставить значение в таблицу...


 
DrPass ©   (2004-08-01 13:31) [6]

А кроме того, эта процедура (если бы она была правильно написана) возвращала бы набор данных, и должна вызываться через обычный запрос SELECT, а не ExecProc


 
DrPass ©   (2004-08-01 13:33) [7]


> Вот и я понять не могу... где у меня ошибка, почему я не
> получаю возвращение от ХП параметра OUT_ID и не могу подставить
> значение в таблицу...

Мда... Тебе хоть что получить-то надо???


 
}{ander ©   (2004-08-01 13:33) [8]


> Вот и я понять не могу... где у меня ошибка, почему я не
> получаю возвращение от ХП параметра OUT_ID и не могу подставить
> значение в таблицу...

см. [3]


 
Guest   (2004-08-01 13:37) [9]

а ты его не мо имени присваивай то есть ("OUT_ID") а просто Params[1].Value.. тогда что? может вместо OUT_ID он у тебя как просто 1 называется?


 
Guest   (2004-08-01 13:39) [10]

DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger


 
Koala   (2004-08-01 13:42) [11]


> }{ander ©   (01.08.04 13:33) [8]
>
> см. [3]


Подскажи как правильно... я только учусь... Это 1 работа с Ibase Firebird


 
Guest   (2004-08-01 13:46) [12]

а вот если так сделать тогда что? ты хоть пробовал.. то есть не указывай явно имя параметра просто на индекс валяй

DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger


 
}{ander ©   (2004-08-01 13:46) [13]


>    IN_GNUM VARCHAR(15),
>    IN_MARKA VARCHAR(30))

это входные параметры. Их нужно устанавливать в твоей программе до вызова ХП.
> RETURNS (
>    OUT_ID INTEGER)

а эта конструкция показывает, что будет возвращать твоя ХП при suspend. В данном случае это OUT_ID. И именно этому параметру необходимо присвоить значение в твоем запросе:
/* Procedure Text */
SELECT ...
FROM TBL_REF_AVTO
INTO :OUT_ID


 
Guest   (2004-08-01 13:47) [14]

DM.pFIBSP_REF_FUELMAPE.Params[1].AsInteger := DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger


 
Koala   (2004-08-01 13:48) [15]


> Guest   (01.08.04 13:39) [10]
> DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger

вызываю
DM.pFIBSP_OUT_IDAvto.Params[2].AsInteger
т.к. DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger - это марка авто
ошибка индекс XSQLDA выходит за границы


 
Koala   (2004-08-01 13:57) [16]


> }{ander ©   (01.08.04 13:46) [13]


> /* Procedure Text */
> SELECT ...
> FROM TBL_REF_AVTO
> INTO :OUT_ID


количества в списках столбцов и переменных не совпадают.
Ошибка динамического SQL.
код ошибки SQL = -313.
количества в списке полей и списке переменных не соответствуют.


 
}{ander ©   (2004-08-01 14:00) [17]


> количества в списке полей и списке переменных не соответствуют.


>  SELECT GOS_NUM, MARKA_AVTO


>  INTO :IN_GNUM, :IN_MARKA

если так писАть, то и не будет соответствовать


 
Koala ©   (2004-08-01 14:02) [18]


> }{ander ©   (01.08.04 14:00) [17]
>
> > количества в списке полей и списке переменных не соответствуют.
>
>
> >  SELECT GOS_NUM, MARKA_AVTO
>
>
> >  INTO :IN_GNUM, :IN_MARKA
>
А так IBExpert не ругается... ему все подходит, а вот мне насколько я понимаю не совсем
> если так писАть, то и не будет соответствовать


 
}{ander ©   (2004-08-01 14:08) [19]

Пойми, что ты объявляешь выходным параметром OUT_ID. IN_GNUM и IN_MARKA у тебя входные параментры. Поэтому совсем непонятно, зачем ты присваиваешь им значения в процедуря, хотя должен это сделать до входа в нее. И еще: если твоя процедура возвращает более одной строки, то вызывать ее нужно:
select * from PR_OUT_ID_AVTO (parameters)


 
Koala ©   (2004-08-01 14:15) [20]


> }{ander ©   (01.08.04 14:08) [19]

Программа разрабатывалась на DBAse 3 года назад как локальная, тогда об истории хранения норм списания топлива вопрос не стоял, сейчас нужна сетевая и с историей хранения топлива, поэтому и делаю конверацию с восстановлением истории норм списания топлива...
а процедура нужна, что бы возвращала значение поля ID_Avto по входным параметрам Гос.№ и марка авто. возвратится должна одна сторка с одним полем OUT_ID...
хочу сразу разобратся что-бы потом вопросов не задавать....


 
DrPass ©   (2004-08-01 14:32) [21]


> хочу сразу разобратся что-бы потом вопросов не задавать....

Ну тогда бы начал с того, что не знаешь языка SQL...
Насколько я понял, тебе нужно это:
CREATE PROCEDURE PR_OUT_ID_AVTO (
  IN_GNUM VARCHAR(15),
  IN_MARKA VARCHAR(30))
RETURNS (
  OUT_ID INTEGER)
AS
begin
for
SELECT ID_AVTO
FROM TBL_REF_AVTO
WHERE GOS_NUM=:IN_GNUM AND MARKA_AVTO=:IN_MARKA
INTO :OUT_ID
do
SUSPEND;
end


 
Koala ©   (2004-08-01 14:34) [22]

Ошибка я понял в сомой ХП
CREATE PROCEDURE PR_OUT_ID_AVTO (
   IN_GNUM VARCHAR(15),
   IN_MARKA VARCHAR(30))
RETURNS (
   OUT_ID INTEGER)
AS
begin
for
 /* Procedure Text */
 SELECT GOS_NUM, MARKA_AVTO
 FROM TBL_REF_AVTO
 INTO :IN_GNUM, :IN_MARKA
do
    begin
      suspend;
    end
end

"Предупреждение: (Variable "OUT_ID" declared, but never used)"

как присвоить и вернуть значение...???


 
Koala ©   (2004-08-01 14:39) [23]


> DrPass ©   (01.08.04 14:32) [21]

ПОМОГЛОООООО.....
Спасибо понял где ошибка...

Прошу прощения за глупые вопросы но все мы когдато не сразу бегали, а сначала под стол пешком ходили....


 
Sergey Masloff   (2004-08-01 14:44) [24]

OFFTOP но
Сдается мне что у тебя гос. номер не уникальный? ;-)
Типа может быть мерин 600 и запорожец ушастый с идентичными номерами?


 
Koala ©   (2004-08-01 14:49) [25]


> Sergey Masloff   (01.08.04 14:44) [24]

Да, на фирме есть именные номера которые переходят полсле продажи авто на новый автомобиль... Я сам первый раз был в шоке...


 
Sergey Masloff   (2004-08-01 14:54) [26]

Koala ©   (01.08.04 14:49) [25]
понятно ;-)



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.04 c
3-1091027872
Koala
2004-07-28 19:17
2004.08.22
Как построить запрос


3-1091102730
AVPog
2004-07-29 16:05
2004.08.22
Память ест в access


9-1083936428
WHS
2004-05-07 17:27
2004.08.22
DelphiX or Opengl


4-1089277426
Volodya_
2004-07-08 13:03
2004.08.22
CreateProcess


3-1090587495
MORA
2004-07-23 16:58
2004.08.22
целостность БД