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

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

Копирую из InterBase в MS SQL с фотографиями! [D7, IB6.x, MSSQL]


Страницы:   1 2 3 4

DmitrichJ ©   (2007-03-30 16:19:00) 

Я перевржу БД из InterBase в MS SQL. Все данные копируются хорошо, но с фотографиями небольшая проблема. Они попадают в MS SQL в обрезаном виде-только начало фотографии, а всё остальное серое. Делаю так:

var
 stream:TStringStream;
...
//выборка из InterBase
 Form1.IBQuery1.SQL.Text:='Select * from ...';
...
//Вставляем в MS SQL
   Form1.Query1.SQL.Text:=
        'Insert into Table(...,photo) values (.... , :P)';

stream:=TStringStream.Create(Form1.IBQuery1.FieldByName('PHOTO').AsString);
Form1.Query1.ParamByName('P').LoadFromStream(stream,ftBlob);
Form1.Query1.ExecSQL;

Подскажите, что не так/

Поля в БД
InterBase: BLOB BLOB sub_type 1 segment size 1 CHARACTER SET WIN1251
MS SQL: IMAGE


DmitrichJ   (2007-04-19 12:21:00) [1]

Если кому интересно, то проблема была в компоненте подключения, что BDE, что ADO одно и то же. Не реагируют на TextSize. После подключение через библиотеки dbExpress всё решилось само сабой и заработало как часы. Всем мпасибо!


Германн   (2007-04-07 01:51:00) [2]

Чой-то как не заглянешь в "Базы", сей топик где-то сверху уже вторую неделю. :(

Я вот только не пойму - зачем "фото" хранить в самой базе? Это что - редактируемая пользователями на уровне пикселей информация?


Gadenysh   (2007-04-06 17:54:00) [3]


> что такое DBUtils?

да неважно - это моя библиотека. RunQuery - обертка, выполняющая запросы.Для тебя же общий принцип такой - вставляется запись без поля Image. Потом позиционируешь на нее датасет(по ID например), делаешь Edit, создаешь поток для поля и копируешь в него из созданного ранее потока с картинкой. Делаешь Post. вобщем, см. код


DmitrichJ   (2007-04-06 15:35:00) [4]

что такое DBUtils?


DmitrichJ   (2007-04-06 12:30:00) [5]

Что такое DBUtils?


Gadenysh   (2007-04-05 18:36:00) [6]

так я заливаю медиа через АДО. может, чем поможет

procedure TDataContext.PutBLOBData(ImageID, ContentTypeID, MediaTypeID: integer;
 MediaURL: string; Stream: TStream);
var
 q: TADODataSet;
 sm: TStream;
begin
 q := TADODataSet.Create(nil);
 try
   q.Connection := Datasource;
   DBUtils.RunQuery(q, sqlAppendMedia,  ['id', 'contentTypeID', 'mediaTypeID', 'mediaURL'],
     [ImageID, ContentTypeID, MediaTypeID, MediaURL], true); // тут обычный инсерт для всех полей кроме Image
   q.Edit;
   sm := q.CreateBlobStream(q.FieldByName('MediaFile'), bmWrite);
   try
     Stream.Position := 0;
     sm.CopyFrom(Stream, Stream.Size);
   finally
     sm.Free;
   end;
   q.Post;
 finally
   q.Free;
 end;
end;


DmitrichJ   (2007-04-05 15:03:00) [7]

Если послать команду set text size < чем 32768, то все данные и будут так работать, но если поставить> 32768, то всё равно 32768. ЧЁРТ!!!!


DmitrichJ   (2007-04-05 15:03:00) [8]

Если послать команду set text size < чем 32768, то все данные и будут так работать, но если поставить> 32768, то всё равно 32768. ЧЁРТ!!!!


DmitrichJ   (2007-04-05 14:16:00) [9]

Не всё так просто! Там есть команда: set textsize 32786 !!!!!!!!!!!! Как её изменить?


DmitrichJ   (2007-04-05 13:20:00) [10]

не знаю как из проф файла сразу всё скопировать.


DmitrichJ   (2007-04-05 13:20:00) [11]

Insert into Table(...,photo) values (.... , 0xffd8....
там где данные картинки строка короткая для картинки и не закрывается скобкой


Jan1   (2007-04-05 13:07:00) [12]


>   Form1.Query1.SQL.Text:=
>        'Insert into Table(...,photo) values (.... , :P)';
>
>  stream:=TMemoryStream.Create;
>  stream.LoadFromFile('...');
>  Form1.Query1.ParamByName('P').LoadFromStream(stream,ftBlob);
>
>  Form1.Query1.ExecSQL;

запусти профайлер и посмотри какой запрос идет на сервак.


Jan1   (2007-04-05 13:06:00) [13]


> Microsoft SQL Server  2000 - 8.00.760

не мешало бы обновиться... уже 4-й сервис пак вышел.
SP4 + Hot Fixes


DmitrichJ   (2007-04-05 12:49:00) [14]

Microsoft SQL Server  2000 - 8.00.760 (Intel X86)   Dec 17 2002 14:22:05   Copyright (c) 1988-2003 Microsoft Corporation  Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)


Jan1   (2007-04-05 12:41:00) [15]


> 1. На сервере Microsoft SQL Server 2000 (server и client)
>    На клиенте Microsoft SQL Server 2000 (client)

что дает select @@version?


DmitrichJ   (2007-04-05 12:32:00) [16]

1. На сервере Microsoft SQL Server 2000 (server и client)
   На клиенте Microsoft SQL Server 2000 (client)

2. Извини, про драйвера не совсем понял. Если в DataBase, то MSSQL


Jan1   (2007-04-05 12:26:00) [17]


> 1. Версия сервера, сервис паки и т.п.
> 2. Какие драйвера юзаешь.

где?


DmitrichJ   (2007-04-05 12:21:00) [18]

Настройки DBE:
 DataBase:
   DataBaseName=aventin
   DriverName=MSSQL
   Params:
     User Name=sa
     Pssword=...
     ServerName=server1
     DataBase Name=aventin
 Query:
   DataBaseName=aventin
   {в параметрах ничего не указываю, другие настройки по умолчанию}

Делаю собственно добавление, как писал выше:
var
stream:TMemoryStream;
...

//Вставляем в MS SQL

  Form1.Query1.SQL.Text:=
       'Insert into Table(...,photo) values (.... , :P)';
 stream:=TMemoryStream.Create;
 stream.LoadFromFile('...');
 Form1.Query1.ParamByName('P').LoadFromStream(stream,ftBlob);
 Form1.Query1.ExecSQL;
 
Form1.Query1.ExecSQL;

//--------------MS SQL
 photo IMAGE

Проверка:
  Form1.Query1.SQL.Text:=
       'Select * from table where...';
  Form1.Query1.Active;

1. Проверяю в отчёте Fast Reporte 4, картинка связывается с полем и отображается только часть, хотя тоже самое в InterBase делается всё полностью.
2.
var
 stream:TStringStream;
...
 stream:=TStringStream.Create(Form1.Query1.FieldByName('photo').asstring);
 ShowMessage(inttostr(stream.size)+'b');

 Результат: 32768b. Если данные меньше, то всё ок, а если больше то отсекаются.


Jan1   (2007-04-05 10:34:00) [19]


> Jan1, ошибки при добавлении нет. И в BDE не было. Просто
> саму картинку он добавляет только 32кб, а всё остальное
> нет.

1. Версия сервера, сервис паки и т.п.
2. Какие драйвера юзаешь.
3. Полностью код.
4. Как проверяешь.


DmitrichJ   (2007-04-04 21:32:00) [20]

Jan1, ошибки при добавлении нет. И в BDE не было. Просто саму картинку он добавляет только 32кб, а всё остальное нет.


Страницы:   1 2 3 4

Наверх

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