Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1183202653
KyKypy3HuK
2007-06-30 15:24
2007.07.22
Как правильно написать


15-1182299605
multilink
2007-06-20 04:33
2007.07.22
Программа для управления несколькими соединениями


2-1182966867
Ivolg
2007-06-27 21:54
2007.07.22
Проблема с вкладками


15-1182784402
antonn
2007-06-25 19:13
2007.07.22
проблемка с html


2-1182787203
mry
2007-06-25 20:00
2007.07.22
array of Byte





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский