Текущий архив: 2015.09.10;
Скачать: CL | DM;
Вниз
Как сохранить картинку в поле 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;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.044 c