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

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

Strored Procedure - где ошибка [D5, BTrieve SQL]


Алексей Пеньков ©   (2002-09-11 14:00:00) 

Здравствуйте.
Написал процедуру

////// Begin clipboard //////
CREATE PROCEDURE GetPrice (IN aData date, IN aWare ZSTRING(10), IN aPCode INT(2), OUT aPrice FLOAT);

BEGIN
SET aPrice =0;
SET aPrice =
(SELECT price FROM warehist_dbt
WHERE (ware = aWare) and (KodPrice = aPCode) and
(NdprtClnt = 0) and (KodClnt = 0) and "date" =
(select min("date") from warehist_dbt where (ware = aWare) and (KodPrice = aPCode) and (NdprtClnt = 0) and (KodClnt = 0) and ("date" > adata)
))
);

IF (aPrice = 0) then
SET aPrice = (SELECT price FROM warePrc_dbt
WHERE (ware = aWare) and (KodPrice = aPCode) and (NdprtClnt = 0) and (KodClnt = 0) );
END IF;
END
////// End clipboard //////

В проекте:

GetPRC.ParamByName("aData").AsDate:=Data1.Date;
getPRC.ParamByName("aWare").AsString:=tbTable1.fieldByName("Ware").AsString;
getPRC.ParamByName("aPCode").AsInteger:=2;
getPrc.ExecProc;

Здесь вылетает ошибка:
Key violation
[Pervasive Software][ODBC Interface][Pervasive Software SQL Engine] The output parameter must be a variable or parameter name

Где и что я наворочал?


SteelHorse   (2002-09-12 10:41:00) [1]

>Алексей Пеньков
Извините, значит тезка и по имени и по фамилии
с одним человеком. Бывают всякие совпадения...


Алексей Пеньков   (2002-09-12 10:30:00) [2]

>Извращенец2
В голове логика срабатывает (IMHO), а на сервере отказывает :)

>ЮЮ
Вероятно, Вы правы. Попробую использовать CURSOR для установки
значения выходного параметра.

>LordOfSilence
Нет, но готов рассмотреть предложения о сотрудничестве ;)


LordOfSilence   (2002-09-12 09:04:00) [3]

То Алексей Пеньков.
Извините, немного не по теме.
Алексей, а Вы случайно никогда не работали в Москве
на фирме НИКПА+?


ЮЮ   (2002-09-12 08:59:00) [4]

SET aPrice = (SELECT price FROM warePrc_dbt WHERE (ware = aWare) and (KodPrice = aPCode) and (NdprtClnt = 0) and (KodClnt = 0) );

попытка переменной присвоить DataSet. Очевидно, что переменной надо присваивать значение поля одной из записей, возвращаемой SELECTOM


Извращенец2   (2002-09-12 08:48:00) [5]

> Алексей Пеньков
я имел ввиду логическую модель, т.е. прокрутить все в голове:)


Алексей Пеньков   (2002-09-12 08:17:00) [6]

>Извращенец2
>проверь, что процедура должна выдавать и выдает ли она это.
Ошибка вылетает при попытке выполнить процедуру, т.е. ничего не выдает.

>KDS
К сожалению, не тут. К тому же aPCode - входной (IN) параметр.


KDS   (2002-09-11 18:27:00) [7]

>The output parameter must be a variable or parameter name
по нашему:
Выходной параметр должен быть переменной (или именем параметра?)

проблема тут
getPRC.ParamByName("aPCode").AsInteger:=2;
надо ставить переменную туда, а не литерал! Т.е.

var vPCode:SmallInt;
...
vPCode:=2;
...
getPRC.ParamByName("aPCode").AsInteger:=vPCode;


Извращенец2   (2002-09-11 15:55:00) [8]

Похоже, проблема в выходных параметрах а не в теле процедуры. Здесь ошибка на логическом уровне, а не на механическом(написание). проверь, что процедура должна выдавать и выдает ли она это.


Наверх

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