Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Запись картинки в DBF - файл   Найти похожие ветки 

 
fishka   (2006-01-16 11:48) [0]

Можно или нет в поле MEMO записать картинку (файл типа BMP, JPG)? Если да, то можно ссылку или пример, пожалуйста.


 
Johnmen ©   (2006-01-16 12:02) [1]

Типа того

var
 FS : TFileStream;
...
FS:=TFileStream.Create("C:\yourfile.bmp",fmOpenRead);
Query1.SQL.Text:="INSERT INTO Table (...,memofield) VALUES (...,:YourParam)";
Query1.ParamByName("YourParam").LoadFromStream(FS,ftMemo);
Query1.ExecSQL;
FS.Free;


 
fishka   (2006-01-16 12:41) [2]

Спасибо за ответ.
У меня не получается просмотреть эти картинки.
Честно говоря, записывать, может быть, у меня и получалось (через TMemoryStream).
Но вот просмотреть полученные данные не могу (через DBImage).
Помогите, пожалуйста.


 
Johnmen ©   (2006-01-16 13:25) [3]

См.через TImage, предварительно загнав туда картинку...


 
SLP ©   (2006-01-16 14:44) [4]

Я считаю, что корректно записать картинку в DBF невозможно, т.к. типа поля image в DBF нет.
Записала несколько простых рисунков в DBF-файл, повторив  Johnmen ©   (16.01.06 12:02) [1] , только изменив:
LoadFromStream(FS,ftMemo);
на  
LoadFromStream(FS,ftTypedBinary);
Если писать как ftMemo, то рисунок вообще не записывается. (попробуйте)
Далее, сделала селект, и отобразила поле МЕМО в DBImage1. Рисунок отобразился, но косой и кривой, хотя был простейший график ( но разобрать можно). Более сложная картинка отображается простым нагромаждением цветных линий и точек...


 
Johnmen ©   (2006-01-16 14:51) [5]

>SLP ©   (16.01.06 14:44) [4]
>т.к. типа поля image в DBF нет.

Ну-у-у.. В Парадоксе там, или в IB его тоже нет. Однако картинки пишутся :)

Ну с типизированным чтением из стрима м.б. и так.......

>Если писать как ftMemo, то рисунок вообще не записывается. (попробуйте)

Как проверено?


 
SLP ©   (2006-01-16 15:25) [6]

Если рисунок пишу как tMemo, то в DBF он записывается.

FS:=TFileStream.Create("D:\rose1.bmp",fmOpenRead);
Q1.SQL.Text:="INSERT INTO im_rose (kod,image_rose) VALUES (5,:YourParam)";
//Q1.ParamByName("YourParam").LoadFromStream(FS,ftTypedBinary);
Q1.ParamByName("YourParam").LoadFromStream(FS,ftMemo);
Q1.ExecSQL;
FS.Free;

НО при  отображении в DBImage1, выдается ошибка :
...Stream read error...
Отображение этой же записи в DBMemo1 выглядит так:
BM:||
При записи перепробовала: ftGraphic,ftBlob,ftFmtMemo, результат  тот же.


 
Johnmen ©   (2006-01-16 15:31) [7]

Это потому, что читаешь неправильно.
Попробуй зачитать в TImage.


 
SLP ©   (2006-01-16 15:39) [8]

А как? Не знаю. Сделала селект, а дальше что?


 
Johnmen ©   (2006-01-16 15:50) [9]

MS:=TMemoryStream.Create;
TBlobField(Q1.FieldByName("...")).SaveToStream(MS);
Image.Picture.Bitmap.LoadFromStream(MS);


 
SLP ©   (2006-01-16 16:09) [10]

Johnmen! Спасибо Вам за ответы.
Image.Picture.Bitmap.LoadFromStream(MS) - так у меня почему-то не получилось... Вообще ничего не отображалось в Image1.
Я сделала так ( топорно...):
TBlobField(Q1.FieldByName("image_rose")).SaveToFile("d:\rose7.bmp");
//Image1.Picture.Bitmap.LoadFromStream(MS);
Image1.Picture.Bitmap.LoadFromFile("d:\rose7.bmp");
Теперь отображается корректный хороший рисунок. Попробовала более сложную картинку - тоже все хорошо отображается. Отсюда вывод - в DBF файле записаны корректные картинки. Но почему  же DBImage1 не отображает?


 
Johnmen ©   (2006-01-16 16:15) [11]

>SLP ©   (16.01.06 16:09) [10]

Попробуй перед Image1.Picture.Bitmap.LoadFromStream(MS); :
MS.Position:=0;

>Но почему  же DBImage1 не отображает?

Потому, что он заточен под "чистый" тип BLOB.
А МЕМО им не является...


 
SLP ©   (2006-01-16 16:32) [12]

MS.Position:=0;  Получилось! Но только тогда, когда поставила после
Image1.Picture.Bitmap.LoadFromStream(MS);
Спасибо!


 
Johnmen ©   (2006-01-16 23:05) [13]

Не за что.

>MS.Position:=0;  Получилось! Но только тогда, когда поставила после
>Image1.Picture.Bitmap.LoadFromStream(MS);

Это потому, что повторно используется тот же экземпляр стрима.
Если для каждой закачки картинки в TImage использовать вновь создаваемый, то и указатель в стриме двигать не придётся...


 
fishka   (2006-01-17 09:51) [14]

Спасибо Johnmen ©  и SLP © за ответы и поддержку.

У меня тоже вроде получилось, но немного страшно, потому что не знаю, сколько записей выдержит DBF-файл с картинками. Картинки, вероятнее всего, будут результатом сканирования в черно-белом изображении.
Каков может быть размер dbt-файла?


 
Anatoly Podgoretsky ©   (2006-01-17 11:43) [15]

2 gb



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
6-1132219975
ancara
2005-11-17 12:32
2006.03.12
Indy HTTPS


2-1140433954
Лом
2006-02-20 14:12
2006.03.12
помогите разобраться


2-1140421864
Ио
2006-02-20 10:51
2006.03.12
Вопрос по времени


2-1140881753
13
2006-02-25 18:35
2006.03.12
иконки в DLL


3-1137372262
DimonS
2006-01-16 03:44
2006.03.12
Access +SQL