Конференция "Базы" » dbExpress не открывает личико... [FB2.1]
 
  • pushkin42 © (20.08.09 08:27) [0]
    Поначитавшись "правильных" статей по поводу dbExpress и работы с BLOB полями в нём, решил сбацать крутую программку для хранения фотографий в базе.

    И вот, я начинаю...
    var
    ms: TMemoryStream;
    sqlquery1: Tsqlquery;
    begin
    ms := TMemoryStream.Create;
    sqlquery1 := tsqlquery.Create(nil);
    sqlquery1.SQLConnection := DB^;
    try
    SQLQuery1.Close;
    SQLQuery1.SQL.Clear;
    SQLQuery1.SQL.Add('INSERT INTO DOCUMENTS(DATA) VALUES(:BLB_VAR)');
    SQLQuery1.Params.Clear;
    SQLQuery1.Params.CreateParam(ftBlob, 'BLB_VAR', ptInput);
    ms.LoadFromStream(S);
    ms.Position := 0;
    SQLQuery1.ParamByName('BLB_VAR').SetBlobData(ms.Memory, ms.Size);
    SQLQuery1.ExecSQL();
    finally
    ms.Free;
    sqlquery1.Close;
    sqlquery1.Free;
    end;



    на строчке SQLQuery1.ExecSQL()

    получаем:
    incorrect values within sqlda structure

    запрос, естественно, не выполняется...

    Используются Delphi 2009, dbExpress, Firebird 2.1.2 dialect 3;
    IBExpert, через который в ту же базу все картинки прекрасно грузятся.

    Размер блоб - 1024, подтип - binary

    Помогите пожалуйста :-)
  • Сергей М. © (20.08.09 11:40) [1]
    Вместо

    SQLQuery1.ParamByName('BLB_VAR').SetBlobData(ms.Memory, ms.Size);

    попробуй

    S.Position := 0;
    SQLQuery1.ParamByName('BLB_VAR').LoadFromStream(S);
  • Яцхен (06.07.10 14:55) [2]
    подскажите как быть с блобами которые больше 32 Кб ?

    есть таблица (Оракл)

    CREATE TABLE "RLR_ADMIN"."RLR_LOG"
      ( "ID" NUMBER(*,0) NOT NULL ENABLE,
    "XML_NAME" NVARCHAR2(50),
    "XML_DATA" NCLOB,
     CONSTRAINT "PK_RLR_LOG_ID" PRIMARY KEY ("ID")
    ) ;

    пока значения XML_DATA меньше 32 к -- все работает нормально,
    а когда больше -- получаю ошибку оракла:

    ORA-01460: unimplemented or unreasonable conversion requested.


    вставку делаю через хранимую процедуру.
    .....
               Stream := TStringStream.Create(WideString(XmlData));
               try
                 Stream.Position := 0;
                 Params.ParamByName('P_XML_DATA').LoadFromStream(Stream, ftWideMemo);
               finally
                 Stream.Free;
               end;
               ExecProc;
    ......



    прообовал и через
    Params.ParamByName('P_XML_DATA').SetBlobData(Stream, Stream.Size);


    результат тот же - ошибка

    каким макаром можно писать в базу xml-файлы больших размеров?
 
Конференция "Базы" » dbExpress не открывает личико... [FB2.1]
Есть новые Нет новых   [134432   +20][b:0][p:0.001]