Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

Понять не могу....(делаю перенос данных из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.032 c
14-1091279569
vidiv
2004-07-31 17:12
2004.08.22
Вопрос про прозрачность (PNG) в php


11-1079638623
nester
2004-03-18 22:37
2004.08.22
Как пользоваться KOLTabControl.


4-1089734671
Vitalnet
2004-07-13 20:04
2004.08.22
Как переместить созданный фаил в нужный католог


4-1089718674
rOOse
2004-07-13 15:37
2004.08.22
Нажатие на кнопку. WinApi


1-1091612653
П7
2004-08-04 13:44
2004.08.22
Перемещение между компонентами в программе (TAB)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский