Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dbExpress не открывает личико... [FB2.1]


pushkin42 ©   (2009-08-20 08:27:00) 

Поначитавшись "правильных" статей по поводу 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

Помогите пожалуйста :-)


Яцхен   (2010-07-06 14:55:00) [1]

подскажите как быть с блобами которые больше 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-файлы больших размеров?


Сергей М.   (2009-08-20 11:40:00) [2]

Вместо

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

попробуй

S.Position := 0;
SQLQuery1.ParamByName('BLB_VAR').LoadFromStream(S);


Наверх

Титульная страница Поиск, карта сайта Написать письмо