StoredProc problem
8 отговора
238 прегледа
StoredProc problem
Имам таблица, която съхранява данните за количествата на разни продукти.
В нея са дефинирани Min и Max съответно за минимално и максимално количество на продукта.Написал съм процедура, която при продажба на продукт сравнява оставащото количество с минимума който е зададен и ако това количество е паднало под минимума процедурата връща истина след което се предприемат други действия, които нямат нищо общо с проблема.
Използвам Interbase 7.1
Поствам кода процедурата:
С процедурата няма проблеми на сървъра.
Проблема е следния:
При execution на процедурата от Клиента се получава следната грешка:
Ето и кода на самата извикваща функция:
На IBStoredProc1 в ObjectInspector и е зададено Database, StoredProcName и Transaction
Грешката се появява на този ред: ParamByName('IDNo').AsInteger := ID;
Някакви мнения?
В нея са дефинирани 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;
Някакви мнения?
Re: StoredProc problem
когато си в design time можеш ли да работиш с параметрите, казваш ли че IDN0 е integer и че е input параметър(те принципно се инициализират автоматично ама знае ли човек)
Re: StoredProc problem
Пробвай:
............
with IBDataModule.IBStoredProc1 do begin
Prepare;
ParamByName('IDNo').AsInteger := ID;
...................
............
with IBDataModule.IBStoredProc1 do begin
Prepare;
ParamByName('IDNo').AsInteger := ID;
...................
вероятно несъвместими типове ...
задай от кода на параметъра:
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 да ли са правилни!
Светът е малък нека си помагаме.
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 да ли са правилни!
Светът е малък нека си помагаме.
Re: вероятно несъвместими типове ...
Когато избера от Object Inspector 'Params" се появява същото съобщение за грешка и не се отваря никакъв джам.Това не го бях забелязал.
А сега накъде?
А сега накъде?
може би правописна грешка ...
Прави ми впечатление че:
CREATE PROCEDURE IF_MIN (IDNO INTEGER)...
това О или 0 e?
.
а после се обръщаш към него:
ParamByName('IDNo').AsInteger := ID; с малка буква.
Пробвай:
ParamByName('IDNО').AsInteger := ID; с малка буква.
CREATE PROCEDURE IF_MIN (IDNO INTEGER)...
това О или 0 e?
а после се обръщаш към него:
ParamByName('IDNo').AsInteger := ID; с малка буква.
Пробвай:
ParamByName('IDNО').AsInteger := ID; с малка буква.
Re: може би правописна грешка ...
Това е 'О' не '0'(нула).Пробвал съм с 'IDNo' и с 'IDNO', но ефекта е същия. Лошото , е че още в Object Inspector при избора на 'Params' на IBStoredProc компонентата дава същата грешка. Unknown SQL Data type (590)
Interbase 7.1 контекстно зависим ли е?
Interbase 7.1 контекстно зависим ли е?
Re: може би правописна грешка ...
Само едно предположение.
Да не би проблема да е от Boolean-a?
Защо не пробваш да върнеш вместо Boolean, 0 или 1 --> Integer(или smallint)
Да не би проблема да е от Boolean-a?
Защо не пробваш да върнеш вместо Boolean, 0 или 1 --> Integer(или smallint)
Re: може би правописна грешка ...
Проблема се разреши по начина който предложи .Не разбирам защо на сървъра няма проблем с boolen тип а в Delphi има проблем.Става въпрос за Delphi 7.