Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 08:47   #1
D-Tritus
 
Регистрация: 22.08.2010
Сообщений: 6
По умолчанию Экспорт blob поля из paradox

Здравствуйте, подскажите пожалуйста решение следующей задачи: есть база paradox, два файла: dbf - таблица и mb - с данными из полей таблицы типа ole. Соответственно в таблице есть поле типа ole, в нём хранятся (как я понимаю) ссылки на изображения. В paradox editor можно посмотреть эти изображения, но экспортировать по одной записи очень долго. Мне необходимо по всем записям из этой таблицы вытащить и сохранить изображение на которое ссылается поле ole. К базе подключение сделал, таблицу получил, но как действовать дальше не знаю. Прокопал интернет, только куски кода нашёл, но разобраться толком не получается. Подскажите или направьте куда копать?
D-Tritus вне форума Ответить с цитированием
Старый 11.08.2015, 09:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можно посмотреть что за куски кода ты нашел?
Так то как правило можно использовать тип TBlobField. У него есть метод сохранения в файл. Единственное - тип OLE меня смущает, но все же покажи как пробовал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 10:03   #3
D-Tritus
 
Регистрация: 22.08.2010
Сообщений: 6
По умолчанию

Вот красным тип поля, и собственно сами записи. Большими буквами запись - где есть ссылка, маленькими где нету.

Детально если посмотреть запись: выбираю поле, и кнопка saveblob, пишу расширение jpeg и сохраняется картинка

Это по сути задачи, теперь по коду:
много уже что перепробовал, не могу найти направление как делать точно. Нашёл вот этот код, вышибает ошибка Bitmap is not valid. Куда копать, подскажите?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
blob: tblobstream;
begin
blob:= TBlobStream (Table1.CreateBlobStream(Table1.FieldByName('Deta'),bmRead));
try
blob.seek(0, sofrombeginning);
DBImage1.Picture.Bitmap.Assign(TBLOBField(Table1.Fields[18]));
with tfilestream.create('your_name.bmp', fmcreate) do
try
copyfrom(blob, blob.size)
finally
free
end;
finally
blob.free
end;
end;
D-Tritus вне форума Ответить с цитированием
Старый 11.08.2015, 10:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ага. Тебе нужно высосать из БД всю порнушку? )))
Все просто:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
blob: tblobstream; fs:TFileStream;
begin
with Table1 do begin
 first;
 while not eof do begin
  blob:= TBlobStream (CreateBlobStream(FieldByName('Deta'),bmRead));
  fs:=TFileStream.Create('d:\'+FieldByName('Name').AsString+'.jpg');

  try
   blob.seek(0, sofrombeginning);
   fs.CopyFrom(blob,blob.Size);
   fs.free;
   blob.free; 
  except

  end;

  next;
 end;
end;
Это с потолка, но сработать должно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 10:52   #5
D-Tritus
 
Регистрация: 22.08.2010
Сообщений: 6
По умолчанию

Спасибо, всё сработало шикарно. Добавил разве что параметр для метода Create.
Код:
fs:=TFileStream.Create('d:\1\'+FieldByName('Sys').AsString+'.jpg',fmCreate);
П.С.:в данном случае нет, но если будет база с ней, то обязательно воспользуюсь скриптом
D-Tritus вне форума Ответить с цитированием
Старый 11.08.2015, 11:01   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не мешало бы еще проверить на предмет наличия картинки в поле перед считыванием
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.08.2015, 11:02   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Добавил разве что параметр для метода Create.
А-а-а, ну да. Чет я его упустил... Старею... Принц Пенсии всетки )))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 12:01   #8
D-Tritus
 
Регистрация: 22.08.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не мешало бы еще проверить на предмет наличия картинки в поле перед считыванием
Написал такую вот конструкцию, но пара пустых всё равно попало
Код:
if not(FieldByName('Deta').Value ='')
А ещё соответственно попали размером до 100 кб, не представляющие никакой информации, их просмотреть нельзя
Но это уже всё не критично, руками можно отобрать

Последний раз редактировалось D-Tritus; 11.08.2015 в 12:10.
D-Tritus вне форума Ответить с цитированием
Старый 11.08.2015, 12:11   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

if not FieldByName('Deta').IsNull
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.08.2015, 13:03   #10
D-Tritus
 
Регистрация: 22.08.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
if not FieldByName('Deta').IsNull
Спасибо, так лучше =)
D-Tritus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать значения blob поля из одной таблицы в другую BDE Paradox astecenko БД в Delphi 1 02.12.2011 11:26
blob поля в бд paradox wulf_01 БД в Delphi 7 31.10.2011 00:10
экспорт в exel c бд paradox wulf_01 Помощь студентам 1 28.10.2011 18:11
Blob-поля в Firebird Liones БД в Delphi 1 23.11.2010 11:45