Форум: "Базы";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
ВнизПроблема с блоб полем. Найти похожие ветки
← →
Still Swamp (2007-10-09 16:34) [0]Использую компонент TIBStoredProc.
Получаю параметр через TParam.
Все благополучно, за исключением того что из блоб поля получаю вместо его содержимого фразу "(Blob)"
Пробовал по всякому. Эффект один и тот же:
Buffer:=iParam.AsString;
Buffer:=iParam.AsBlob;
iParam.GetData(Buffer);
← →
Desdechado © (2007-10-09 16:55) [1]CreateBlobStream
?
← →
Still Swamp (2007-10-09 17:01) [2]И куда его?
CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream;
Там TField а у меня TParam.
← →
Маша Шрайбер © (2007-10-09 17:05) [3]>> И куда его?
В Парам его! И F1 читай.
← →
Still Swamp (2007-10-09 17:11) [4]Извиняюсь прочитал. И все же не понял тогда.
Еще раз. После исполнения SP у меня есть группа параметров возвращаемых SP.
Я из читаю. SP не возвращает DataSet, а соответсвенно у меня нет списка TField.
CreateBlobStream - я исполюзую для чтения из поля. Передавая ему поле первым параметром.
Но чем он мне поможет, когда я пытаюсь получить Blob из TParam.
← →
Виталий Панасенко(дом) (2007-10-09 17:29) [5]И где эта фраза (Blob) видна ?
← →
Still Swamp (2007-10-09 17:30) [6]В качестве возвращаемого значения если бинарные данные полученные прочитать как строку.
К стати GetDataSize возврвщвет 6.
← →
Johnmen © (2007-10-09 19:32) [7]
> Still Swamp
Можно поинтересоваться, как выглядит ХП, возвращающая блоб, в части выходного параметра и манипуляций с ним?
← →
Still Swamp (2007-10-10 12:16) [8]Вот изловил SQLщика. Он дал такой текст:
CREATE PROCEDURE ORDERSUBDIVISION_REC_PRE_CONF(
IN_UID INTEGER DEFAULT NULL)
RETURNS(
UID INTEGER,
DTINSERT TIMESTAMP,
DTUPDATE TIMESTAMP,
IDENTIFY VARCHAR(50) CHARACTER SET WIN1251,
UIDSOBJECT BIGINT,
GUIDSUBDIVISION VARCHAR(50) CHARACTER SET WIN1251,
GUID VARCHAR(50) CHARACTER SET WIN1251,
PARAMS VARCHAR(4000) CHARACTER SET WIN1251,
CHRONOSACTUAL INTEGER,
DTCLIENT TIMESTAMP,
DATASET BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
INF VARCHAR(255) CHARACTER SET WIN1251,
WAR VARCHAR(255) CHARACTER SET WIN1251,
ERR VARCHAR(255) CHARACTER SET WIN1251,
DEB VARCHAR(255) CHARACTER SET WIN1251)
AS
DECLARE VARIABLE STATUS INTEGER;
begin
FOR SELECT
ORDERSUBDIVISION.UID,
ORDERSUBDIVISION.STATUS,
ORDERSUBDIVISION.DTINSERT,
ORDERSUBDIVISION.DTUPDATE,
OBJECTPROPERTY.IDENTIFY,
OBJECT.UIDS,
SUBDIVISION.GUID,
ORDERSUBDIVISION.GUID,
ORDERSUBDIVISION.PARAMS,
ORDERSUBDIVISION.CHRONOSACTUAL,
ORDERSUBDIVISION.DTCLIENT,
ORDERSUBDIVISION.DATASET,
CASE WHEN ORDERSUBDIVISION.STATUS>3 THEN "Yoi caienu ia aie?ia ioi?aaeyony. " ELSE NULL END
FROM ORDERSUBDIVISION
LEFT OUTER JOIN OBJECTPROPERTY ON ORDERSUBDIVISION.UIDOBJECTPROPERTY=OBJECTPROPERTY.UID
LEFT OUTER JOIN OBJECT ON OBJECT.UID=ORDERSUBDIVISION.UIDOBJECT
LEFT OUTER JOIN SUBDIVISION ON ORDERSUBDIVISION.UIDSUBDIVISION=SUBDIVISION.UID
WHERE (ORDERSUBDIVISION.UID=:IN_UID)
INTO
:UID,
:STATUS,
:DTINSERT,
:DTUPDATE,
:IDENTIFY,
:UIDSOBJECT,
:GUIDSUBDIVISION,
:GUID,
:PARAMS,
:CHRONOSACTUAL,
:DTCLIENT,
:DATASET,
:ERR
DO SUSPEND;
UPDATE ORDERSUBDIVISION
SET STATUS=2
WHERE UID=:IN_UID and ORDERSUBDIVISION.STATUS<4;
end
← →
Desdechado © (2007-10-10 12:26) [9]> SP не возвращает DataSet, а соответсвенно у меня нет списка TField.
Это утверждение явно противоречит приведенному тексту процедуры, т.к.DO SUSPEND;
возвращает именно датасет.
В этом случае вообще лучше делатьSELECT * FROM procname()
← →
Still Swamp (2007-10-10 13:19) [10]DO SUSPEND появилось именно в результате борьбы с вышеуказанной проблемой.
В конце концов и сделали SELECT, и блоб из Field возвращается благополучно, однако, хотелось бы узнать причину столь странного фифекта.
← →
Desdechado © (2007-10-10 13:36) [11]> причину столь странного фифекта
Возвращаемся к исходному - текст процедуры со странным фифектом где?
← →
Still Swamp (2007-10-10 13:48) [12]Вот оно.
CREATE PROCEDURE ORDERSUBDIVISION_REC_PRE_CONF2(
IN_UID INTEGER DEFAULT NULL)
RETURNS(
UID INTEGER,
DTINSERT TIMESTAMP,
DTUPDATE TIMESTAMP,
IDENTIFY VARCHAR(50) CHARACTER SET WIN1251,
UIDSOBJECT BIGINT,
GUIDSUBDIVISION VARCHAR(50) CHARACTER SET WIN1251,
GUID VARCHAR(50) CHARACTER SET WIN1251,
PARAMS VARCHAR(4000) CHARACTER SET WIN1251,
CHRONOSACTUAL INTEGER,
DTCLIENT TIMESTAMP,
DATASET BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
INF VARCHAR(255) CHARACTER SET WIN1251,
WAR VARCHAR(255) CHARACTER SET WIN1251,
ERR VARCHAR(255) CHARACTER SET WIN1251,
DEB VARCHAR(255) CHARACTER SET WIN1251)
AS
DECLARE VARIABLE STATUS INTEGER;
begin
SELECT
ORDERSUBDIVISION.UID,
ORDERSUBDIVISION.STATUS,
ORDERSUBDIVISION.DTINSERT,
ORDERSUBDIVISION.DTUPDATE,
OBJECTPROPERTY.IDENTIFY,
OBJECT.UIDS,
SUBDIVISION.GUID,
ORDERSUBDIVISION.GUID,
ORDERSUBDIVISION.PARAMS,
ORDERSUBDIVISION.CHRONOSACTUAL,
ORDERSUBDIVISION.DTCLIENT,
ORDERSUBDIVISION.DATASET,
CASE WHEN ORDERSUBDIVISION.STATUS>3 THEN "Yoi caienu ia aie?ia ioi?aaeyony. " ELSE NULL END
FROM ORDERSUBDIVISION
LEFT OUTER JOIN OBJECTPROPERTY ON ORDERSUBDIVISION.UIDOBJECTPROPERTY=OBJECTPROPERTY.UID
LEFT OUTER JOIN OBJECT ON OBJECT.UID=ORDERSUBDIVISION.UIDOBJECT
LEFT OUTER JOIN SUBDIVISION ON ORDERSUBDIVISION.UIDSUBDIVISION=SUBDIVISION.UID
WHERE (ORDERSUBDIVISION.UID=:IN_UID)
INTO
:UID,
:STATUS,
:DTINSERT,
:DTUPDATE,
:IDENTIFY,
:UIDSOBJECT,
:GUIDSUBDIVISION,
:GUID,
:PARAMS,
:CHRONOSACTUAL,
:DTCLIENT,
:DATASET,
:ERR;
UPDATE ORDERSUBDIVISION
SET STATUS=2
WHERE UID=:IN_UID and ORDERSUBDIVISION.STATUS<4;
end
← →
Маша Шрайбер © (2007-10-10 14:20) [13]Таким образом вы получите (указав SUSPEND, естественно) в вых. параметре всего лишь "указатель" на BLOB. А чтобы считать значение, надо "напрямую" обращаться к полю таблицы. Об этом написано на вашем любимом ibase.ru
← →
Desdechado © (2007-10-10 16:23) [14]Из справки TParam:
Note: Applications seldom need to read AsBlob because Blob fields can’t be used as output parameters.
← →
Сергей М. © (2007-10-10 16:42) [15]
> Still Swamp (10.10.07 13:48) [12]
>
> Вот оно.
>
И где тут фигурирует blob ?
← →
Desdechado © (2007-10-10 17:24) [16]> И где тут фигурирует blob ?
ВотDATASET BLOB SUB_TYPE 1 CHARACTER SET WIN1251,
← →
Сергей М. © (2007-10-10 17:28) [17]
> Desdechado © (10.10.07 17:24) [16]
А, вижу.
Мартышка к старости)
← →
Still Swamp (2007-10-10 19:04) [18]исходя из фразы "Blob fields can’t be used as output parameters" признаем это явление фичей TParam и тема закрыта?
Просто обидно TParameter + MSSQL такое делают.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.046 c