Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись картинки в DBF - файл [D7, dBase, FoxPro]


fishka ©   (2006-01-16 11:48:00) 

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


Anatoly Podgoretsky   (2006-01-17 11:43:00) [1]

2 gb


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

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

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


Johnmen   (2006-01-16 23:05:00) [3]

Не за что.

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

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


SLP   (2006-01-16 16:32:00) [4]

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


Johnmen   (2006-01-16 16:15:00) [5]

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

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

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

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


SLP   (2006-01-16 16:09:00) [6]

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 15:50:00) [7]

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


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

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


Johnmen   (2006-01-16 15:31:00) [9]

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


SLP   (2006-01-16 15:25:00) [10]

Если рисунок пишу как 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 14:51:00) [11]

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

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

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

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

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


SLP   (2006-01-16 14:44:00) [12]

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


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

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


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

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


Johnmen   (2006-01-16 12:02:00) [15]

Типа того

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо