![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Понять не могу....(делаю перенос данных из Dbase в Firebird) [D6, FireBird 1.5]
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 и не могу подставить
> значение в таблицу...
Мда... Тебе хоть что получить-то надо???