imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136
![]() ![]() ![]() ![]() |
MS SQL. Builder6. Вставка картинки в базу
Дурацкий вопрос, но никак не могу допереть. Есть картинка. Я её умею перетаскивать в объект типа TField, но как потом это поле передать в базу используя ADOQuery? Я попробовал сначала получить нужную строку из базы, потом запихал в ADOQuery->Fields->FieldByName("Photo") картинку загрузкой из потока. А что дальше? Вызывал метод Post(), но потом глюки при попытке просмотра лезут. Чё делать? Можно ли как-то передать данные с того же потока в параметр sql запроса? В смысле в конструкцию UPDATE Base SET Photo=параметр WHERE ID=n запихать параметром данные с картинкой. Впервые столкнулся с проблемой и туплю нещадно.
__________________
"Самое великое достижение Америки - каждый должен голосовать". - Джордж Буш Мл.(Остин, 08.12.00). |
![]() |
![]() |
# 3 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
общий алгоритм:
если картинка из файла - открываем файл бинарным (блоб) потоком и запихиваем через какую-либо буферную переменную в блоб филд в бд... если картинка на канве то все не так просто, тут все зависит от того что за картинка (формат) у тя, т.к. помимо сканлайнсов тебе еще нужно сторить карту цветов, т.к. это битмапа в конечно счете.... думаю проще встроеными средствами сохранить во временный файлик и залить его как в первом случае.... а глюки могут быть - это надо дебажить... проверь как у тебя определен филд...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
![]() |
![]() |
# 4 | |
Junior Member
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136
![]() ![]() ![]() ![]() |
Цитата:
__________________
"Самое великое достижение Америки - каждый должен голосовать". - Джордж Буш Мл.(Остин, 08.12.00). |
|
![]() |
![]() |
# 5 |
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
да нет вроде... там все как обычно должно быть... я когда то давно делал вне нормально и без гемороев... единственное что траблы могут появиться с окончанием потока, т.е. если у тебя размерность разная буфера и файла самого... т.е. на пример буфер у тебя жестко 256 байт а файл у тя к примеру 514, то это надо ручками отслеживать... буфер динамический должен быть по идее... отсюда и картинка сбивается и прочие глюки
ты по пробуй по дебажить на каком нить маленьком файлике то что у тебя считывается и то что в итоге подсовывается в запрос...
__________________
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах Последний раз редактировалось /7y3uK; 26.04.2005 в 11:05. |
![]() |
![]() |
# 6 |
Junior Member
Регистрация: 10.10.2003
Адрес: Москва
Сообщения: 136
![]() ![]() ![]() ![]() |
Фуф, вроде сделал. На самом деле, задача была перенести фотки из бде-шной базы на сервер. Но на данный момент их нужно было просто пару запихать туда для демонстрации другой проги. Я и геммороился с запихиванием картинок из всяких левых источников, как то файл или клипборд. В итоге сделал утилиту, которая из старой базы в новую переносит данные, там все получилось быстро из без проблем с потоками и т.п. Сделал выборку в обеих базах, если в новой нет записи, то всем полям выбранной записи присваиваюстя поля записи из старой базы и делается Post(). Может и не очень хорошо пост юзать, но перенести надо всего сотни три записей.
Кстати, ещё вопрос, может кто знает. У меня в проге создается в рантайме объект TADOQueryб присваивается ссылка на него datasource-у, а на тот зацеплен TDBImage. В рантайме же свойству DataField присваивается значение "Photo", т.е. имя поля с фотографией... Но при выборе записи вылетает ошибка: "Field 'Photo' not found'". Запрос делается типа "SELECT * FROM Base" и т.д. Поле это там точно есть. И не пустое даже. Вот торможу то. Я после одно запроса делал через тот же объек запрос к другой базе с другим набором полей, а картинка то все равно пыталась читаться из него... Всем спасибо. Вопрос снят.
__________________
"Самое великое достижение Америки - каждый должен голосовать". - Джордж Буш Мл.(Остин, 08.12.00). Последний раз редактировалось TRiPLE; 26.04.2005 в 11:51. Причина: наврал с типом ошибки |
![]() |
![]() |
# 7 | |
Guest
Сообщения: n/a
|
Цитата:
TBlobField(FieldByName('Photo')).LoadFromStream(); Но это если не с SQL Serverом работаешь, ну типа для BDE |
|