Delphi / FB or IB / StoredProc and TStoredProc

Вопросы стыковки визуальных компонент (DataControls, EhGrid, VirtualTreeView, DevExpress и т.п.) с данными из БД.

Модераторы: kdv, CyberMax

Ответить
ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

Delphi / FB or IB / StoredProc and TStoredProc

Сообщение ERrorMAKros » 27 июл 2008, 21:39

Добрый день, есть вот такая вот таблица:

Код: Выделить всё

CREATE TABLE IBcurrencydata
(
AINC                     INTEGER         DEFAULT  NULL, // инкримент;
CURDAT_DATE              VARCHAR(255)    DEFAULT  NULL, // дата;
CURDAT_INFO              BLOB            SUB_TYPE 1); // настройки ini файла;
Хранимая процедура получает из IBcurrencydata.CURDAT_INFO в INI_VALUE_ текстовую информацию

Код: Выделить всё

CREATE  OR ALTER PROCEDURE GET_DATEVALUE(DATE_ VARCHAR(25))
        RETURNS(INI_VALUE_    BLOB SUB_TYPE 1,
                RECORD_COUNT_ INTEGER)
AS
BEGIN
   SELECT COUNT (IBCURRENCYDATA.CURDAT_INFO)
   FROM  IBCURRENCYDATA
   WHERE  IBCURRENCYDATA.CURDAT_DATE=:DATE_
   INTO :RECORD_COUNT_;

   IF (RECORD_COUNT_>=001) THEN
     BEGIN 
        SELECT FIRST 1 IBCURRENCYDATA.CURDAT_INFO
        FROM IBCURRENCYDATA
        WHERE IBCURRENCYDATA.CURDAT_DATE=:DATE_
        ORDER BY IBCURRENCYDATA.AINC
        INTO :INI_VALUE_;
        SUSPEND;
     END -- IF RECORD COUNT
   ELSE INI_VALUE_='NONE';
     SUSPEND;
END -- PROCEDURE
Подскажите пожалуйста - как средствами Borland Delphi получить результат (INI_VALUE_) хранимой процедуры? Воспользовался TStoredProc:

Код: Выделить всё

var Res_: String;
Begin
IB_storedproc_.UnPrepare;
IB_storedproc_.StoredProcName  :='GET_DATEVALUE';
IB_storedproc_.Prepare;
IB_storedproc_.Params.ParamByName('DATE_').AsString:='27.07.2008';          
IB_storedproc_.ExecProc;
Res_:=IB_storedproc_.ParamByName('INI_VALUE_').AsString;
End;
...данная реализация не устраивает, потому как возвращаются не те значения (в данном случае "(blob)"),
и если данные больше 255 символов - ...то это уже конкретно crash!

Подскажите пожалуйста альтернативу!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 июл 2008, 00:04

читай www.ibase.ru/devinfo/ibstp.htm
и еще - я тебе форматирование кода поправил. Пришлешь еще раз такое - удалю.

кроме того - нафига ты suspend пишешь, если процедуру не через select ... from proc вызываешь, а IBStoredProc используешь?

до кучи читай и это:
http://www.ibase.ru/devinfo/treereg.htm

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

Сообщение ERrorMAKros » 28 июл 2008, 01:27

Спасибо. Помогло.

Ответить