Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Понять не могу....(делаю перенос данных из Dbase в Firebird) [D6, FireBird 1.5]


Страницы:   1 2

Koala ©   (2004-08-01 13:05:00) 

Есть ХП (которая возвращает 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;
 

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


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

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


Koala   (2004-08-01 14:49:00) [2]


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

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


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

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


Koala   (2004-08-01 14:39:00) [4]


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

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

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


Koala   (2004-08-01 14:34:00) [5]

Ошибка я понял в сомой ХП
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)"

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


DrPass   (2004-08-01 14:32:00) [6]


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

Ну тогда бы начал с того, что не знаешь языка 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:15:00) [7]


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

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


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

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


Koala   (2004-08-01 14:02:00) [9]


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


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


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


>  SELECT GOS_NUM, MARKA_AVTO


>  INTO :IN_GNUM, :IN_MARKA

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


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


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


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


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


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


> 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 выходит за границы


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

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


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


>    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:46:00) [15]

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

DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger


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


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


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


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

DM.pFIBSP_OUT_IDAvto.Params[1].AsInteger


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

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


}{ander   (2004-08-01 13:33:00) [19]


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

см. [3]


DrPass   (2004-08-01 13:33:00) [20]


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо