Форум: "Базы";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Вниз
Копирую из InterBase в MS SQL с фотографиями! Найти похожие ветки
← →
DmitrichJ (2007-03-30 16:19) [0]Я перевржу БД из 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
← →
stud © (2007-03-30 16:33) [1]DmitrichJ (30.03.07 16:19)
AsString
а он не подрезает их??
← →
DmitrichJ (2007-03-30 16:34) [2]stud, вообще не должен. Т.к. неограничен, но я пытаюсь сейчас проверить.
← →
Jan (2007-03-30 16:36) [3]
> stream:=TStringStream.Create(Form1.IBQuery1.FieldByName("PHOTO").
> AsString);
> Form1.Query1.ParamByName("P").LoadFromStream(stream,ftBlob);
>
а чего так? юзай метод Assign.
> Я перевржу БД из InterBase в MS SQL.
почему не через линкед?
← →
DmitrichJ (2007-03-30 16:36) [4]Проверил. Нет это не он подрезает.
← →
DmitrichJ (2007-03-30 16:36) [5]Jan, можно пожробнее?
← →
Jan (2007-03-30 16:37) [6]
> Jan, можно пожробнее?
что конкретнее?
← →
DmitrichJ (2007-03-30 16:40) [7]Jan, что за линкед?
← →
Johnmen © (2007-03-30 16:42) [8]....
stream:=TMemoryStream.Create;
TIBBlobField(Form1.IBQuery1.FieldByName("PHOTO")).SaveToStream(stream);
....
← →
DmitrichJ (2007-03-30 16:47) [9]TIBBlobField из какой библиотки?
← →
Johnmen © (2007-03-30 16:50) [10]TBlobField
← →
DmitrichJ (2007-03-30 16:51) [11]говорит, что нет такой=(
← →
DmitrichJ (2007-03-30 16:57) [12]Ладно... не важно как, но в MemoryStream я получил полноценную картинку, копирую её на диск-всё нормально.
Может не так я её добавляю в MS SQL?
← →
Jan (2007-03-30 17:17) [13]
> Jan, что за линкед?
линкед сервер из MS SQL на InterBase. Ставишь ODBC драйвер - http://www.praktik.km.ua/downloads/Firebird_ODBC_2.0.0-Win32.exe, добавляешь в ODBC системный DSN - выбираешь установленный драйвер и настраиваешь на нужную тебе базу. В MS SQL добавляешь линкед сервер или через EM или sp_addlinkedserver. И данные перебрасываешь через openquery.
← →
DmitrichJ (2007-03-30 17:24) [14]Я понял почуму обрезаются картинки.
Почему поле IMAGE в MS SQL вмещает только 2 Мб?
← →
DmitrichJ (2007-03-30 17:25) [15]ой. Наврал. 32 Кб. При таком способе вставки.
← →
DmitrichJ (2007-03-30 17:35) [16]Можно ли вставить картинку stream типа TMemoryStream в MS SQL? Или может проблема в самой базе и объявлении типов? Использую тип IMAGE
← →
stud © (2007-03-30 17:56) [17]так блоб используй
← →
Плохиш © (2007-03-30 17:58) [18]
> stream:=TStringStream.Create(Form1.IBQuery1.FieldByName("PHOTO").AsString);
Концом строки является символ #0, вот от этого и думай.
PS. В справке подробненько описано как работают с BLOB-полями, там, по-секрету, даже пример есть...
← →
DmitrichJ (2007-03-30 18:01) [19]Я нашёл проблему. Дело в том, что Query не может передавать больше 32Кб в одном запросе. Есть другие варианты вставки записей в БД?
← →
Плохиш © (2007-03-30 18:17) [20]Используй ADO
← →
Jan (2007-03-30 18:18) [21]
> Используй ADO
там тоже не все так гладко...
← →
Виталий Панасенко © (2007-03-30 18:24) [22]
> DmitrichJ (30.03.07 18:01) [19]
> Я нашёл проблему. Дело в том, что Query не может передавать
> больше 32Кб в одном запросе. Есть другие варианты вставки
> записей в БД?
Это ты через БДЕ тянешь ?
← →
DmitrichJ (2007-03-30 19:43) [23]Виталий Панасенко, да. Использую Query из BDE
← →
Desdechado © (2007-03-30 19:45) [24]> Query не может передавать больше 32Кб в одном запросе.
Враки. Через параметры можно что угодно и сколько угодно.
← →
DmitrichJ (2007-03-30 19:47) [25]Desdechado, Как именно? Как записать картинку в поле типа IMAGE?
← →
Jan (2007-03-30 19:58) [26]
> Враки. Через параметры можно что угодно и сколько угодно.
нет, там все не так просто... а именно с блобом...
← →
DmitrichJ (2007-03-30 20:15) [27]При работе с InterBase таким способом закачивается в БД через IBQuery что угодно, а тут вот фигня какая-то=(
← →
Jan1 (2007-04-02 11:32) [28]
> При работе с InterBase таким способом закачивается в БД
> через IBQuery что угодно, а тут вот фигня какая-то=(
ключевое слово InterBase. Потому как в M SQL если мы льем чего-нить через параметры, этот гад юзает sp_executesql, а это в свою очередь накладывает отпечаток на то что, сервер пытается выделить память под всю блобину... и тут начинается самое интересное...
ЗЫ чего-то мой логин украли :)
← →
DmitrichJ (2007-04-03 15:48) [29]Помогите всё же решить проблему. Пожалуйста.
← →
Правильный Вася (2007-04-03 16:09) [30]
> Использую Query из BDE
БДЕ администратор - configuration - drivers - native - mssql - blob size + F1
← →
DmitrichJ (2007-04-03 16:22) [31]Правильный Вася, извини. Не совсем понял.
← →
Правильный Вася (2007-04-03 16:28) [32]открываешь, находишь, читаешь описание, делаешь выводы
← →
Jan1 (2007-04-03 17:18) [33]
> Помогите всё же решить проблему. Пожалуйста.
млин а линкед то чего не подошел? залил бы за 5 сек и забыл бы о проблеме...
← →
DmitrichJ (2007-04-03 17:35) [34]Jan1, хорошо. А как потом пользователям добавлть фотографии?
← →
Jan1 (2007-04-03 18:05) [35]
> Jan1, хорошо. А как потом пользователям добавлть фотографии?
не понял. причем тут пользователи? тебе надо перенести данные из ФБ в МС? или чего?
← →
DmitrichJ (2007-04-04 13:06) [36]Jan1, да, но проблема больше в принципе в добавлении фотографии в БД MS SQL. Т.е. вопрос звучит так: Как добавить большую картинку в MS SQL в поле IMAGE?
← →
Jan1 (2007-04-04 13:46) [37]
...
ADOCommand.CommandText := " insert into [ImageStore] ([ImageBody]) values(:ImageBody)";
ADOCommand.Parameters.ParameterByName("ImageBody").LoadFromFile(OpenDialog1.File Name, ftVarBytes);
ADOCommand.Execute();
...
Но учти что с большИми могут быть траблы... все зависит от сервера где крутится MS SQL...
← →
DmitrichJ (2007-04-04 13:50) [38]Jan1, вот по этой схеме через BDE Query он и закружает только часть картинки, а при использовании ADO выдаёт ошибку=(
← →
DmitrichJ (2007-04-04 13:56) [39]Jan1, использую BDE Query по такому же принципу. Картинки загружает, но не полностью. А при использовании ADO даёт ошибку.
← →
Jan1 (2007-04-04 13:58) [40]
> А при использовании ADO даёт ошибку.
и где она?
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.041 c