Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

Не могу записать в 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.048 c
15-1158733932
Проггер
2006-09-20 10:32
2006.10.15
перенос D5


15-1159249195
Новичоккк
2006-09-26 09:39
2006.10.15
Вопрос по FastScript


2-1159628079
pqpqp
2006-09-30 18:54
2006.10.15
if else


1-1157210797
Ragazor
2006-09-02 19:26
2006.10.15
Как передать из dll хранящиеся там frame-ы?


2-1159491560
Maveric AM10m
2006-09-29 04:59
2006.10.15
IRC клиент