![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись картинки в 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;