StoredProc problem

8 отговора 238 прегледа
#1

StoredProc problem

Имам таблица, която съхранява данните за количествата на разни продукти.
В нея са дефинирани Min и Max съответно за минимално и максимално количество на продукта.Написал съм процедура, която при продажба на продукт сравнява оставащото количество с минимума който е зададен и ако това количество е паднало под минимума процедурата връща истина след което се предприемат други действия, които нямат нищо общо с проблема.
Използвам Interbase 7.1
Поствам кода процедурата:

CREATE PROCEDURE IF_MIN (IDNO INTEGER)
RETURNS (UNDERMIN BOOLEAN)
AS
DECLARE VARIABLE LAVAIL INTEGER;
DECLARE VARIABLE LMIN INTEGER;
begin
select Available from stock
where ID = :idno
into : LAvail;
select MinAvail from stock
where ID = :idno
into LMin;
if(LAvail <= LMin)then
UnderMin = true;
suspend;
end

С процедурата няма проблеми на сървъра.
Проблема е следния:
При execution на процедурата от Клиента се получава следната грешка:

Unknown SQL Data type (590)



Ето и кода на самата извикваща функция:


function TMainForm.IfMinimum(ID : Integer): Boolean;
begin
with IBDataModule.IBStoredProc1 do begin
ParamByName('IDNo').AsInteger := ID;
ExecProc;
Result := ParamByName('UnderMin').AsBoolean;
end;
end;


На IBStoredProc1 в ObjectInspector и е зададено Database, StoredProcName и Transaction

Грешката се появява на този ред: ParamByName('IDNo').AsInteger := ID;

Някакви мнения?

Отговор
в отговор на AJ #2

Re: StoredProc problem

когато си в design time можеш ли да работиш с параметрите, казваш ли че IDN0 е integer и че е input параметър(те принципно се инициализират автоматично ама знае ли човек)

Отговор
в отговор на AJ #3

Re: StoredProc problem

Пробвай:
............
with IBDataModule.IBStoredProc1 do begin
Prepare;
ParamByName('IDNo').AsInteger := ID;
...................

Отговор
в отговор на AJ #4

вероятно несъвместими типове ...

задай от кода на параметъра:
function TMainForm.IfMinimum(ID : Integer): Boolean;
begin
with IBDataModule.IBStoredProc1 do
begin
Params[0].DataType := ftInteger;
Params[0].PарамТъпе := ptInput;

ParamByName('IDNo').AsInteger := ID;
ExecProc;
Result := ParamByName('UnderMin').AsBoolean;
end;
end;

или с други думи: като "избереш" от Object Inspectora Params ти се отваря джам с параметрите, като "цъкнеш"(ех, че я мразя тая дума) на някой от тях в Object inspectora се появяват характеристиките на параметъра. Виж за параметъра ID да ли са правилни!

Светът е малък нека си помагаме.
Отговор
в отговор на Vermax #5

Re: вероятно несъвместими типове ...

Когато избера от Object Inspector 'Params" се появява същото съобщение за грешка и не се отваря никакъв джам.Това не го бях забелязал.
А сега накъде?

Отговор
в отговор на AJ #6

може би правописна грешка ...

Прави ми впечатление че:
CREATE PROCEDURE IF_MIN (IDNO INTEGER)...

това О или 0 e?.

а после се обръщаш към него:
ParamByName('IDNo').AsInteger := ID; с малка буква.

Пробвай:
ParamByName('IDNО').AsInteger := ID; с малка буква.

Отговор
в отговор на Vermax #7

Re: може би правописна грешка ...

Това е 'О' не '0'(нула).Пробвал съм с 'IDNo' и с 'IDNO', но ефекта е същия. Лошото , е че още в Object Inspector при избора на 'Params' на IBStoredProc компонентата дава същата грешка. Unknown SQL Data type (590)

Interbase 7.1 контекстно зависим ли е?

Отговор
в отговор на AJ #8

Re: може би правописна грешка ...

Само едно предположение.
Да не би проблема да е от Boolean-a?
Защо не пробваш да върнеш вместо Boolean, 0 или 1 --> Integer(или smallint)

Отговор
в отговор на tpt #9

Re: може би правописна грешка ...

Проблема се разреши по начина който предложи .Не разбирам защо на сървъра няма проблем с boolen тип а в Delphi има проблем.Става въпрос за Delphi 7.

Отговор