Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.05.2008, 12:32
Axotnik Axotnik вне форума
Прохожий
 
Регистрация: 16.10.2007
Сообщения: 10
Репутация: 10
По умолчанию 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  
Старый 18.05.2008, 09:05
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Судя по приведеному коду в 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  
Старый 18.05.2008, 10:04
Axotnik Axotnik вне форума
Прохожий
 
Регистрация: 16.10.2007
Сообщения: 10
Репутация: 10
По умолчанию

по подробнее можна...
Ответить с цитированием
  #4  
Старый 18.05.2008, 10:17
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Что конкретно "подробнее"?
Ответить с цитированием
  #5  
Старый 18.05.2008, 11:27
Axotnik Axotnik вне форума
Прохожий
 
Регистрация: 16.10.2007
Сообщения: 10
Репутация: 10
По умолчанию

как ето реализовать..если можна то код...
Ответить с цитированием
  #6  
Старый 18.05.2008, 11:37
Axotnik Axotnik вне форума
Прохожий
 
Регистрация: 16.10.2007
Сообщения: 10
Репутация: 10
По умолчанию

вроде как работает:Всем большое пасибо
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  
Старый 18.05.2008, 11:42
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Пример на одном файле с картинкой.

Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:26.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025