Форум: "Базы";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизНе могу записать в InterBase JPG (c BMP - нормально) Найти похожие ветки
← →
fishka (2006-08-09 11:50) [0]Вот кусочек программы, который работает если информацию брать из BMP:
IBTable3.Edit;
(IBTable3.FieldByName("area") as TBlobField).LoadFromStream(FS);
IBTable3.Post;
Что надо изменить, чтобы можно было использовать файлы типа JPG?
← →
DrPass © (2006-08-09 11:58) [1]Этот код работает нормально с любым типом данных в потоке. Ошибка где-то в ином месте
← →
Desdechado © (2006-08-09 12:01) [2]Есть подозрение, что ты просто потом не можешь показать то, что сохранил. Но это из другой оперы, из поддержки в Image и DBImage сторонних форматов.
← →
Romkin © (2006-08-09 12:02) [3]http://forum.sources.ru/index.php?showtopic=148297
← →
fishka (2006-08-09 12:38) [4]ты просто потом не можешь показать то, что сохранил - Скорее всего это так.
Спасибо всем! Воспользуюсь ссылкой.
← →
Desdechado © (2006-08-09 13:05) [5]Romkin © (09.08.06 12:02) [3]
Я обычно явно сохраняю тип в отдельном поле, тогда не нужно гадать по сигнатурам, что зарыто в блобе.
← →
Romkin © (2006-08-09 13:37) [6]Desdechado © (09.08.06 13:05) [5] Зато сигнатуры позволяют точно установить, что это. Это же не обязательно в поле может лежать. Просто поток...
Да и надежнее как-то, мало ли какое рассогласование может случиться.
← →
Fishka (2006-08-11 16:54) [7]Если все взять из примера (из ссылки), то вылетает на строке:
Field.SaveToStream(Stream);
ошибка:
Bitmap Image is not valid.
Если брать BMP, то ошибки нет. Если jpg, то вылетает на вышеуказанной ошибке и (видимо) не пишется в поле таблицы area
(создано так
IBQuery1.SQL.Add("area BLOB SUB_TYPE -1,");
или так:
IBQuery1.SQL.Add("area BLOB,"); )
В чем ошибка?
← →
Desdechado © (2006-08-11 17:14) [8]> Bitmap Image is not valid.
Попытка показать JPEG в TBitmap или на кнопку тиснуть...
К сохранению в БД отношения не имеет.
Stream - тип у него какой?
← →
Fishka (2006-08-11 18:14) [9]Все взято из ссылки:
http://forum.sources.ru/index.php?showtopic=148297
← →
Fishka (2006-08-11 18:15) [10]Stream - тип у него какой?
TStream;
← →
fishka (2006-08-15 09:43) [11]JPG так и не получается записать.
← →
Desdechado © (2006-08-15 11:13) [12]И что делал еще?
Ты хоть локализовал причину - это проблема записи или проблема отображения? Ошибки появляются? Текст ошибок, текст попыток...
http://www.ln.ua/~openxs/articles/smart-questions-ru.html
← →
fishka (2006-08-15 12:43) [13]Fishka (11.08.06 16:54) [7]
Если все взять из примера (из ссылки), то вылетает на строке:
Field.SaveToStream(Stream);
ошибка:
Bitmap Image is not valid.
Что здесь непонятно? На записи вываливается, текст ошибки приведен.
Я не умею задавать вопросы?????????
← →
Romkin © (2006-08-15 12:47) [14]А у меня все работает. Странно, правда?
← →
Desdechado © (2006-08-15 13:00) [15]> Я не умею задавать вопросы?????????
Нет. И решать их - тоже. За 5 дней ни на йоту не продвинулся...
Хотя я даже на этом форуме регулярно раз в неделю даю код:Query1.Sql.Text :=
"INSERT INTO testblob " +
" ( " +
" fBlob" +
" )" +
" VALUES" +
" (" +
" :ParamBlobField" +
")";
Query1.ParamByName("ParamBlobField").DataType := ftBlob;
Query1.ParamByName("ParamBlobField").ParamType := ptInput;
Query1.ParamByName("ParamBlobField").LoadFromFile("MyFile",ftBlob);
Query1.ExecSql;
Немного не то, но вполне нормальный путь для экспериментов.
А ты не удосужился не только не поискать, а еще и удивиться, что тебе не помогают. Это только младенцев с ложки кормят. А взрослых лодырей пинком под зад обычно...
← →
sniknik © (2006-08-15 13:14) [16]> Что здесь непонятно?
понятно все! а именно то, что ты попросту вреш...
посмотрим на приведенный пример из сылки (значимая часть, где "ошибка" )var
Stream: TStream;
begin
Result := False;
if not Field.isNULL then
begin
Stream := TMemoryStream.Create;
try
Field.SaveToStream(Stream); <<<<-------
....
что видим? запись из поля в нетипизированных поток, т.е. ему абсолютно пофигу какие данные в него пишутся, он просто не знает что такое конкретный тип, у него все, хоть Монна Лиза картинкой, том Ленина текстом, ... это набор байт.
и приводится ошибка
> Bitmap Image is not valid.
??? оба на, ошибка то, о том, что Bitmap (которого вообще тут нет, в этом коде) не распознал записанные данные как изображение...
вывод? ну, или обьявили конкурс "кто лучше соврет и тем не менее получит правильный ответ", или у тебя всетаки не тот код, что в ссылке, и ошибка не там, а на "исковерканном" тобой варианте, который ты скрываеш...
> Я не умею задавать вопросы?????????
для тебя это новость?
← →
fishka (2006-08-15 14:37) [17]Romkin © (15.08.06 12:47) [14]
База какая? У меня InterBase 5.6
Desdechado © (15.08.06 13:00) [15]
Через Insert (Update) мне не надо. Через IBTable желательно. Это так сделано в предыдущем проекте. (Это диплом, а не реальная жизнь), поэтому пытаюсь взять из примера по ссылке.
sniknik © (15.08.06 13:14) [16]
Сейчас нет последнего варианта программы. Предоставлю весь текст сегодня ночью или завтра утром.
Почему BMP записывается в таблицу и отображается без проблем? Файл с картинкой выбирается в диалоге.
← →
Romkin © (2006-08-15 14:42) [18]fishka (15.08.06 14:37) [17] А при чем здесь база? Ей совершенно все равно, что у нее в BLOB записано, понимаешь?
Я, конечно, потелепаю: орет TDBImage, который ты прицепил к этому полю.
Ошибка-то именно в том, что jpg кто-то пытается прочитать как bmp. А это может делать только какой-то компонент.
← →
fishka (2006-08-15 14:47) [19]Romkin © (15.08.06 14:42) [18]
орет TDBImage -телепатирование, возможно, удалось! Проверю вечером.
А как с этим бороться?
← →
Stanislav © (2006-08-15 14:50) [20]Тебе нужно положить на форму просто TImage и использовать эту функцию:
uses ...,JPEG;
...
function ShowJPG (Field:TBlobField;var Image:TImage):Integer;
var S:TMemoryStream;J:TJPEGImage;
begin
Result:=0;
if not Field.DataSet.Active or Field.IsNull
then
begin
Image.Canvas.Brush.Color:=clBtnFace;
Image.Canvas.FloodFill(0,0,clWhite,fsSurface);
patBlt (Image.Canvas.Handle ,0,0,Image.Picture.Width,Image.Picture.Height,PATCOPY);
end
else
begin
S:=TmemoryStream.Create;
J:=TJpegImage.Create;
S.Position:=0;
Field.SaveToStream(S);
S.Position:=0;
J.LoadFromStream(S);
Image.Picture.Bitmap.Assign(J);
Result:=S.Size;
J.Free;
S.Free;
end;
end;
← →
Romkin © (2006-08-15 15:00) [21]А посмотреть по ссылке пример использования?
А именно строчку
LoadPictureFromBLOB(img1.Picture, Dataset.FieldByName("PICTURE") as TBLOBField);
???
Читать надо все, что написано, а не просто копипастить
← →
fishka (2006-08-15 15:02) [22]Да, как все у меня запущено..........
Что за зверь patBlt ?
← →
Stanislav © (2006-08-15 15:16) [23]fishka (15.08.06 15:02) [22]
Windows.patblt
Это помоему закраска, в однотонный цвет если нет фотки.
А вызывать нужно на AfterScroll запроса.
Вообще я ее давно не использую с тех пор как установил себе cxLib, там это все решено.
← →
fishka (2006-08-17 09:57) [24]sniknik © (15.08.06 13:14) [16]
понятно все! а именно то, что ты попросту вреш...
Проблема была в TDBImage. И вылетало именно на указанной строке.
В чем же была моя ложь?
Romkin © (15.08.06 14:42) [18]
Спасибо за "телепатию".
Проблема решилась по JPG.
Надо еще gif записать попробовать.......
← →
Desdechado © (2006-08-17 11:21) [25]> Проблема была в TDBImage.
О чем я тебе еще в [8] неделю назад сказал.
← →
sniknik © (2006-08-17 15:37) [26]> Проблема была в TDBImage. И вылетало именно на указанной строке.
> В чем же была моя ложь?
а в [16] не понятно написано в чем? и это кстати подтвердилось... TDBImage там не участвует.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.059 c