|
#1
|
|||
|
|||
Blob-поля..
Добрый день уважаймые..у меня такой вопросс---как занести картинку в базу данных в блоб-поле через параметризованный запросс.Вот пример кода.Когда я захожу в интербейс.Подключаю свою базу и проверяю блоб поле--мне видаеть ошибка --ето не графический файл..Что делать .Помогите пожалуста..
Код:
DM.IBQuery2.SQL.Clear; DM.IBQuery2.SQL.Text:='insert into IMAGES(ID_IMAGES,NAME_1,NAME_2,NAME_3,IMG_1,IMG_2,IMG_3) values(:id,:a,:b,:c,:d,:e,:g);'; DM.IBQuery2.Params[0].AsInteger:=strtoint(edit1.text); DM.IBQuery2.Params[1].AsString:=edit28.Text; DM.IBQuery2.Params[2].AsString:=edit29.Text; DM.IBQuery2.Params[3].AsString:=edit30.Text; DM.IBQuery2.Params[4].AsBlob:=OpenPictureDialog1.FileName; DM.IBQuery2.Params[5].AsBlob:=OpenPictureDialog2.FileName; DM.IBQuery2.Params[6].AsBlob:=OpenPictureDialog3.FileName; DM.IBTransaction1.Commit; DM.IBQuery2.ExecSQL; Admin: Не забываем использовать теги для оформления кода! Последний раз редактировалось Admin, 17.05.2008 в 12:37. |
#2
|
|||
|
|||
Судя по приведеному коду в BLOB записываются имена файлов, а не сами изображения.
Не зная деталей могу только обрисовать схему как я записываю картинки в блоб. переменная типа TPicture, - создается: Pct := TPicture.Create; - в нее загружается изображение из файла: Pct.LoadFromFile(OpenPictureDialog1.FileName); Далее можно картинку сохранить в TMemoryStream (кстати, ее вообще можно загрузить и без TPicture: MemStream.LoadFromFile(OpenPictureDialog1.FileName )). "Передвинуть" битовый образ картинки в String (проще будет передавать как параметр) и записать в базу. Move(S[1], MemStream.Buffer, MemStream.Size); DM.IBQuery2.Params[4].AsBlob:= S; //S : string; Для работы с блоб полями можно воспользоваться специальным потоком для записи в блоб (и последующего чтения): S := TBlobStream.Create(<FieldBlob1>, bmReadWrite)]; Последний раз редактировалось san-46, 18.05.2008 в 10:09. |
#3
|
|||
|
|||
по подробнее можна...
|
#4
|
|||
|
|||
Что конкретно "подробнее"?
|
#5
|
|||
|
|||
как ето реализовать..если можна то код...
|
#6
|
|||
|
|||
вроде как работает:Всем большое пасибо
Stream1 := TMemoryStream.Create; Stream1.Clear; DBImage1.Picture.Bitmap.SaveToStream(Stream1); Stream1.Position := 0; for i := 1 to Stream1.Size do begin Stream1.Read(d, 1); im := im+d; end; DM.IBQuery6.Params[4].AsBlob:=im; |
#7
|
|||
|
|||
Пример на одном файле с картинкой.
Код:
procedure AnyProc; var MemStream : TMemStream; S : String; begin //открыть диалог и выбрать файл (без понятия как вы там эти картинки //выбираете для записи в базу if not OpenPictureDialog1.Execute then Exit; MemStream := TMemStream.Create; try MemStream.LoadFromFile(OpenPictureDialog1.FileName)); SetLength(S, MemStream.Size); Move(S[1], MemStream.Buffer, MemStream.Size); DM.IBQuery2.Params[4].AsBlob:= S; finally MemStream.Free end; end; |
#8
|
|||
|
|||
А можно еще проще.
Код:
Stream := TMemoryStream.Create; Try DBImage1.Picture.Bitmap.SaveToStream(Stream); Stream.Seek(0,0); DM.IBQuery6.Params[4].AsBlob.LoadFromStream(Stream); Finally Stream.Free; End; |
#9
|
|||
|
|||
Цитата:
У lmikle профессиональный вариант. Последний раз редактировалось san-46, 18.05.2008 в 11:55. |
#10
|
|||
|
|||
извините но такого свойства как DM.IBQuery6.Params[4].AsBlob.LoadFromStream(Stream);
в делфи нету |
#11
|
|||
|
|||
а как записать большой текст из мемо в blob???
|
#12
|
|||
|
|||
Да, действительно "AsBlob" определен как String и там не может быть декларированных свойств. Надо использовать String для образа картинки и передавать блоб полю. Как в моем посте выше.
|
#13
|
|||
|
|||
Цитата:
BLOB в БД должен быть определен как "подтип 1" - строка. Впрочем, для текста это не очень существенно, но тем не менее... Читаются из BLOB такие строки так: S := DM.IBQuery2.FieldByName('SOMEFIELD').AsString; Где "S" может быть и Memo1.Text; Последний раз редактировалось san-46, 18.05.2008 в 14:38. |
#14
|
|||
|
|||
Извини САН-46 а что это за тип такой
MemStream : TMemStream; |
#15
|
|||
|
|||
Цитата:
|