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

Вниз

Как сохранить картинку в поле BLOB БД Firebird?   Найти похожие ветки 

 
Novicer   (2014-02-24 00:37) [0]

Доброго времени суток! Собственно сабж :) Нашел пример тут: http://programmersforum.ru/showthread.php?t=190609 Как уверяли работающий, но у меня с ним возникли проблемы... Создал BLOB-поле PHOTO1 в БД длинной 16384(подтип текст,WIN1251) Через OpenPictureDialog добавил в Image1 фото,затем пробую сохранить в БД так как сделано в примере и получаю такую ошибку: http://s52.radikal.ru/i138/1402/93/f8e9724cdcf3.jpg
В чем засада непонятно... :(


 
Novicer   (2014-02-24 00:50) [1]

Думается мне что подтип неверный... Но какой задать при создании поля непонятно,они там все цифирками обозначены... :( Чтение онлайн-мануала к IBExperty http://ibexpert.net/ibe/index.php?n=Doc.DefinitionBlob#Subtype ясности не внесли :(


 
Novicer   (2014-02-24 00:54) [2]

Изменил подтип поля на 0(Binary), но ошибка при сохранении фотки  всеравно вылетает...   :(


 
Novicer   (2014-02-24 01:55) [3]

Забыл сказать что строку DM.qrTree.ParamByName("Pict").AsBlob := Ss.DataString; изменил на DM.qrTree.ParamByName("Pict").AsBlob := Ss.Bytes;
Иначе компилятор ругается... :(


 
Inovet ©   (2014-02-24 08:46) [4]

1 минута поиска в примерах привела к
...\Samples\Delphi\Database\IBX\FishFact\Readme.htm"
дальше смотреть не стал


 
Inovet ©   (2014-02-24 08:53) [5]

И в 100500 раз ты, конечно, снова проигнорируешь, но вдруг
http://ibase.ru/ibfaq.htm#blob


 
Novicer   (2014-02-24 09:47) [6]

Спасибо за помощь!


 
Inovet ©   (2014-02-24 10:03) [7]

> [4] Inovet ©   (24.02.14 08:46)
> дальше смотреть не стал

Посмотрел, что там в dfm. Естественно, никаких TIBTabel в реальном проекте не должно быть, уже говорили об этом.


 
Novicer   (2014-02-24 11:07) [8]

В D2010 нет папки Samples\ Delphi... :(


 
Novicer   (2014-02-24 14:37) [9]

С трудом но удалось записать в BLOB-поле PHOTO таблицы фото. В IBExpert можно просмотреть содержимое, а вот как теперь его отобразить в программе незнаю. Пробовал использовать DBImage, указал DataSource а вот в перечне Field моего BLOB-поля PHOTO нет :( Пробовал в поток читать так:
var
 Ss  : TStringStream;
 St : string;
begin
st := IBQuery1.FieldByName("PHOTO").AsString;
Ss := TStringStream.Create(st);
if Ss.Size > 0 then
   begin
   Image1.Picture.Bitmap.LoadFromStream(Ss);
   end;
Ss.Free;  
end;
При выполнении вылетает ошибка что нет поля PHOTO, хотя курсор на той записи где есть и поле и картинка в нем. В чем трабла непонятно... :(


 
sniknik ©   (2014-02-24 14:40) [10]

> В чем трабла непонятно... :(
верь ошибке
> При выполнении вылетает ошибка что нет поля PHOTO


 
Novicer   (2014-02-24 14:41) [11]

http://i058.radikal.ru/1402/6b/4da568c4aa1f.jpg


 
sniknik ©   (2014-02-24 14:44) [12]

> TStringStream
> AsString
фото???


 
sniknik ©   (2014-02-24 14:45) [13]

Novicer   (24.02.14 14:41) [11]
я и в первый раз поверил, но мне не надо, ты верь...


 
Novicer   (2014-02-24 14:45) [14]

Есть поле и данные в нем тоже. Пробовал через ShowMessage отобразить данные из других полей,все показывает. Может при запросе не читает их из BLOB? Только как вытянуть оттуда фото и показать непонятно... :(


 
Inovet ©   (2014-02-24 14:48) [15]

> [11] Novicer   (24.02.14 14:41)

Ну, так и написано что нет такого поля. И ещё вопрос - почему ты это поле упроно пихаешь в сроки. Поток и тот строковый. БЛОБ тоже строковый. Где в файле с картнинкой текстовые строки?


 
sniknik ©   (2014-02-24 14:52) [16]

> Есть поле и данные в нем тоже. Пробовал через ShowMessage отобразить данные из других полей,все показывает
- канал спорт не показывает.
- есть такой канал, показывает. проверял смотрел другие, все классно видно.
...
ничего странного не замечаешь?


 
Inovet ©   (2014-02-24 14:53) [17]

Текст запроса показывай


 
Novicer   (2014-02-24 14:54) [18]

Я понимаю что ошибка неспроста. Почему оно не видит поле? В чем может быть причина? Как его указать/прочитать данные?


 
Novicer   (2014-02-24 14:56) [19]

Запрос из таблицы MAINLIST:
with IBQuery1 do
begin
Close;
SQL.Text := "SELECT * FROM MAINLIST";
if not Prepared then Prepare;
Open;
end;


 
Novicer   (2014-02-24 14:59) [20]

Сделал по другому,без строк,но ошибка та же "нет поля":
var
 Ss  : TStringStream;
 St : TBytes;
begin
st := IBQuery1.FieldByName("PHOTO").AsBytes;
Ss := TStringStream.Create(st);
if Ss.Size > 0 then
   begin
   Image1.Picture.Bitmap.LoadFromStream(Ss);
   end;
Ss.Free;  
end;


 
sniknik ©   (2014-02-24 15:00) [21]

> почему ты это поле упроно пихаешь в сроки.
посмотри в ссылку на "уверяли работающий" пример из [0].


 
sniknik ©   (2014-02-24 15:03) [22]

> Novicer   (24.02.14 14:56) [19]
в dbgrid вывести не пробовал? там поле есть?


 
sniknik ©   (2014-02-24 15:05) [23]

+
вообще давно, в BDE + ADO с парадоксом был глюк с полем типа image (вроде)... но не думаю, что тут тот же случай.


 
sniknik ©   (2014-02-24 15:06) [24]

++
> Создал BLOB-поле PHOTO1 в БД длинной 16384(подтип текст,WIN1251
???


 
clickmaker ©   (2014-02-24 15:07) [25]

> BDE + ADO с парадоксом

какая-то взрывоопасная смесь


 
sniknik ©   (2014-02-24 15:10) [26]

> какая-то взрывоопасная смесь
еще какая. счастье что знаком с этим только по вопросам из форума. (вообще с BDE не работал... понадобилось вроде один раз да и то оказалось нужен клипер, причем в "чистом виде", BDE сразу "отпал")


 
Novicer   (2014-02-24 15:10) [27]

В dbgrid тоже нет поля PHOTO, все остальные поля базы в перечне есть. Мне это тоже показалось странным... Думал BLOB грид не видит,вытяну его в DBImage, а там та же петрушка... :( Как правильно указать параметры при создании поля BLOB в таблице БД?


 
Inovet ©   (2014-02-24 15:13) [28]

> [21] sniknik ©   (24.02.14 15:00)
> посмотри в ссылку на "уверяли работающий" пример из [0].

Да видел я её... Также другие давал ссылки, только не подействовали.


 
Novicer   (2014-02-24 15:14) [29]

Нагуглил другую реализацию чтения фото из BLOB:
var
 blobstream : TBlobStream;
 jpeg       : TJPEGImage;
begin
       try
       blobstream := TBlobStream.Create(TBlobField(IBQuery1.FieldByName("PHOTO")), bmRead);
       jpeg  := TJPEGImage.Create;
       jpeg.LoadFromStream(blobstream);
       Image1.Picture.Bitmap.Assign(jpeg);
       finally
       jpeg.Free;
       blobstream.Free;
       end;
end;
Но ошибка та же... Непонятно почему оно поле PHOTO не видит?


 
clickmaker ©   (2014-02-24 15:16) [30]

> оно поле PHOTO не видит?

оно к регистру не чувствительно случаем?


 
Inovet ©   (2014-02-24 15:16) [31]

> [19] Novicer   (24.02.14 14:56)
> "SELECT * FROM MAINLIST"

Тебе говорили * не использовать? Ты сказал "не буду"? Наступай дальше на грабли.


 
Inovet ©   (2014-02-24 15:17) [32]

> [30] clickmaker ©   (24.02.14 15:16)
> оно к регистру не чувствительно случаем?

Телодвижения нужны дополнительные, что вряд ли было, а что было - уже предположили..


 
Novicer   (2014-02-24 15:18) [33]

"Работающий" у меня не работает почему-то... :(


 
sniknik ©   (2014-02-24 15:18) [34]

> Непонятно почему оно поле PHOTO не видит?
ПОЛЯ НЕТ!

> SQL.Text := "SELECT * FROM MAINLIST";
в дизайне поля создавались?


 
Inovet ©   (2014-02-24 15:18) [35]

> [34] sniknik ©   (24.02.14 15:18)
> в дизайне поля создавались?

И об этом уже 100500 раз говорили - фсё пофиг.


 
Novicer   (2014-02-24 15:32) [36]

>clickmaker Поля создавались в IBExpert, все в верхнем регистре как и указано в процедуре просмотра.
>Inovet В данном случае нужна выборка всех полей БД...


 
Novicer   (2014-02-24 15:33) [37]

blobstream := TBlobStream.Create(TBlobField(IBQuery1.FieldByName("PHOTO")), bmRead);


 
sniknik ©   (2014-02-24 15:38) [38]

>Inovet В данном случае нужна выборка всех полей БД...
вот нам это как бы совсем без разницы... т.е. абсолютна.
проблема у тебя, ты задаешь вопрос тебе советуют решение. не нужно ждать чуда, нужно хотя бы ПРОВЕРИТЬ. неважно что тебе нужно по другому, поймешь в чем дело исправишь.

что в гриде от запроса
SQL.Text := "SELECT PHOTO FROM MAINLIST";
???


 
Novicer   (2014-02-24 15:49) [39]

Другая ошибка при SQL.Text := "SELECT PHOTO FROM MAINLIST":
http://s006.radikal.ru/i214/1402/42/6a5cd47c6145.jpg
Не видит ID :(


 
Dennis I. Komarov ©   (2014-02-24 15:50) [40]


>  данном случае нужна выборка всех полей БД...

У БД нет полей, это раз.
Читать про НФ, это два
http://ru.wikipedia.org/wiki/%CD%EE%F0%EC%E0%EB%FC%ED%E0%FF_%F4%EE%F0%EC%E0



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

Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.049 c
2-1396061819
SKIPtr
2014-03-29 06:56
2015.09.10
определить выход из спящего режима


15-1415987381
Rouse_
2014-11-14 20:49
2015.09.10
Пара слов о кэшировании данных при чтении и смартпойнтерах


2-1393479979
Васька
2014-02-27 09:46
2015.09.10
Переключение между дочерними окнами


1-1332865343
n199a
2012-03-27 20:22
2015.09.10
TXMLDocument и Out of memory


2-1395654563
Serj
2014-03-24 13:49
2015.09.10
сканер штрих кода





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский