Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Вниз

Запись картинки в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
2-1140516533
bolbes
2006-02-21 13:08
2006.03.12
Квадрат


3-1137255604
maxxa144
2006-01-14 19:20
2006.03.12
альтернатива array полям.


2-1140538748
Compton's G
2006-02-21 19:19
2006.03.12
Вопросик


4-1135254028
ArtemESC
2005-12-22 15:20
2006.03.12
Как выйти в меню выбора пользователя?


2-1140525190
Wel
2006-02-21 15:33
2006.03.12
TImage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский