Форум: "Базы";
Текущий архив: 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