imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 25.04.2005, 21:06     # 1
TRiPLE
Junior Member
 
Аватар для TRiPLE
 
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136

TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)
MS SQL. Builder6. Вставка картинки в базу

Дурацкий вопрос, но никак не могу допереть. Есть картинка. Я её умею перетаскивать в объект типа TField, но как потом это поле передать в базу используя ADOQuery? Я попробовал сначала получить нужную строку из базы, потом запихал в ADOQuery->Fields->FieldByName("Photo") картинку загрузкой из потока. А что дальше? Вызывал метод Post(), но потом глюки при попытке просмотра лезут. Чё делать? Можно ли как-то передать данные с того же потока в параметр sql запроса? В смысле в конструкцию UPDATE Base SET Photo=параметр WHERE ID=n запихать параметром данные с картинкой. Впервые столкнулся с проблемой и туплю нещадно.
__________________
"Самое великое достижение Америки - каждый должен голосовать".
- Джордж Буш Мл.(Остин, 08.12.00).
TRiPLE вне форума  
Старый 25.04.2005, 21:25     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Можно слить битмап в стрим, и потом передать его в самописную функцию, переводящую бинарный поток в hex-строку вида 0xA2CE3F... (это пример ).
И далее пихать эту строку в запрос:
Код:
UPDATE Base SET Photo=0xA2CE3F... WHERE ID=n
ЕЖ вне форума  
Старый 26.04.2005, 09:51     # 3
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
общий алгоритм:
если картинка из файла - открываем файл бинарным (блоб) потоком и запихиваем через какую-либо буферную переменную в блоб филд в бд...
если картинка на канве то все не так просто, тут все зависит от того что за картинка (формат) у тя, т.к. помимо сканлайнсов тебе еще нужно сторить карту цветов, т.к. это битмапа в конечно счете.... думаю проще встроеными средствами сохранить во временный файлик и залить его как в первом случае....

а глюки могут быть - это надо дебажить... проверь как у тебя определен филд...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
/7y3uK вне форума  
Старый 26.04.2005, 10:34     # 4
TRiPLE
Junior Member
 
Аватар для TRiPLE
 
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136

TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)
Цитата:
/7y3uK:
если картинка из файла - открываем файл бинарным (блоб) потоком и запихиваем через какую-либо буферную переменную в блоб филд в бд...
Это понятно. Я сделал уже из картинки отдельный объект типа блобфилд. И что дальше? Меня то интересует вопрос того как проще передать этот филд уже в базу. Может OLE DB заюзать как-то? Я, правда, ОЛЕ и юзал то всего один раз и то для общения с Excel...
__________________
"Самое великое достижение Америки - каждый должен голосовать".
- Джордж Буш Мл.(Остин, 08.12.00).
TRiPLE вне форума  
Старый 26.04.2005, 11:02     # 5
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
да нет вроде... там все как обычно должно быть... я когда то давно делал вне нормально и без гемороев... единственное что траблы могут появиться с окончанием потока, т.е. если у тебя размерность разная буфера и файла самого... т.е. на пример буфер у тебя жестко 256 байт а файл у тя к примеру 514, то это надо ручками отслеживать... буфер динамический должен быть по идее... отсюда и картинка сбивается и прочие глюки
ты по пробуй по дебажить на каком нить маленьком файлике то что у тебя считывается и то что в итоге подсовывается в запрос...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах

Последний раз редактировалось /7y3uK; 26.04.2005 в 11:05.
/7y3uK вне форума  
Старый 26.04.2005, 12:20     # 6
TRiPLE
Junior Member
 
Аватар для TRiPLE
 
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136

TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)TRiPLE Реально крут(а)
Фуф, вроде сделал. На самом деле, задача была перенести фотки из бде-шной базы на сервер. Но на данный момент их нужно было просто пару запихать туда для демонстрации другой проги. Я и геммороился с запихиванием картинок из всяких левых источников, как то файл или клипборд. В итоге сделал утилиту, которая из старой базы в новую переносит данные, там все получилось быстро из без проблем с потоками и т.п. Сделал выборку в обеих базах, если в новой нет записи, то всем полям выбранной записи присваиваюстя поля записи из старой базы и делается Post(). Может и не очень хорошо пост юзать, но перенести надо всего сотни три записей.
Кстати, ещё вопрос, может кто знает. У меня в проге создается в рантайме объект TADOQueryб присваивается ссылка на него datasource-у, а на тот зацеплен TDBImage. В рантайме же свойству DataField присваивается значение "Photo", т.е. имя поля с фотографией... Но при выборе записи вылетает ошибка: "Field 'Photo' not found'". Запрос делается типа "SELECT * FROM Base" и т.д. Поле это там точно есть. И не пустое даже.

Вот торможу то. Я после одно запроса делал через тот же объек запрос к другой базе с другим набором полей, а картинка то все равно пыталась читаться из него... Всем спасибо. Вопрос снят.
__________________
"Самое великое достижение Америки - каждый должен голосовать".
- Джордж Буш Мл.(Остин, 08.12.00).

Последний раз редактировалось TRiPLE; 26.04.2005 в 11:51. Причина: наврал с типом ошибки
TRiPLE вне форума  
Старый 26.04.2005, 13:30     # 7
Dolphin_spb
Guest
 
Сообщения: n/a

Цитата:
Сообщение от TRiPLE
Дурацкий вопрос, но никак не могу допереть. Есть картинка. Я её умею перетаскивать в объект типа TField, но как потом это поле передать в базу используя ADOQuery? Я попробовал сначала получить нужную строку из базы, потом запихал в ADOQuery->Fields->FieldByName("Photo") картинку загрузкой из потока. А что дальше? Вызывал метод Post(), но потом глюки при попытке просмотра лезут. Чё делать? .
Синтаксис Delphi
TBlobField(FieldByName('Photo')).LoadFromStream();
Но это если не с SQL Serverом работаешь, ну типа для BDE
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 11:27.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.