informix blob필드에
이미지를 저장하는데.....
아무런 error 메시지가 나지 않고
insert가 되거든요...
delphi의 sql Explore??
로 이미지 필드를 select해서 보면 회색 화면만....저장이 안된 거겠죠???
if thphoto1.Picture.Graphic = nil then begin //-----
sa.params.ParamByName('THPHOTO1').Assign(thphoto1.Picture.Bitmap); //널일경우 //-----
end
else begin //-----
JpegImage.Assign(thphoto1.Picture.Graphic); //-----
MS.Position := 0; //-----
JpegImage.SaveToStream(MS); //-----
sa.params.ParamByName('THPHOTO1').LoadFromStream(MS, ftBlob); //-----
end; //-----
JpegImage.Destroy; //-----
MS.Destroy; //-----
어디가 틀렸나요...
midas에서는 .params.ParamByName('THPHOTO1'). param 처리를 하면 일반 blob textㅅ 타입은 먹거든요...혹시 이미지에는 이게 먹지 않나요???
에러 메시지가 않나길네
BitmapImage := TJPEGImage.Create;
MS := TMemoryStream.Create;
try
begin
if xx.FieldByName('th_photo1').IsNull then begin
R_thphoto1.Picture.Assign(nil);
end
else begin
(xx.FieldByName('th_photo1') as TBlobField).SaveToStream(MS);
MS.Position := 0;
BitmapImage.LoadFromStream(MS);
R_thphoto1.Picture.Graphic := BitmapImage;
// R_thphoto1.Picture.Assign(BitmapImage);
end;
end;
finally
ms.Free;
BitmapImage.Free;
end;
방식으로 timge?? 컴포런트에 보여 주고자 했는데 .."jpeg error #52"메시지 가 뜨네요......내일 까지인데......목타네요....
가르쳐 주시옵서서 고수님들이여~~~
> informix blob필드에
> 이미지를 저장하는데.....
> 아무런 error 메시지가 나지 않고
> insert가 되거든요...
> delphi의 sql Explore??
> 로 이미지 필드를 select해서 보면 회색 화면만....저장이 안된 거겠죠???
>
> if thphoto1.Picture.Graphic = nil then begin //-----
> sa.params.ParamByName('THPHOTO1').Assign(thphoto1.Picture.Bitmap); //널일경우 //-----
> end
> else begin //-----
> JpegImage.Assign(thphoto1.Picture.Graphic); //-----
> MS.Position := 0; //-----
> JpegImage.SaveToStream(MS); //-----
> sa.params.ParamByName('THPHOTO1').LoadFromStream(MS, ftBlob); //-----
> end; //-----
> JpegImage.Destroy; //-----
> MS.Destroy; //-----
> 어디가 틀렸나요...
> midas에서는 .params.ParamByName('THPHOTO1'). param 처리를 하면 일반 blob textㅅ 타입은 먹거든요...혹시 이미지에는 이게 먹지 않나요???
>
> 에러 메시지가 않나길네
> BitmapImage := TJPEGImage.Create;
> MS := TMemoryStream.Create;
> try
> begin
> if xx.FieldByName('th_photo1').IsNull then begin
> R_thphoto1.Picture.Assign(nil);
> end
> else begin
> (xx.FieldByName('th_photo1') as TBlobField).SaveToStream(MS);
> MS.Position := 0;
> BitmapImage.LoadFromStream(MS);
> R_thphoto1.Picture.Graphic := BitmapImage;
> // R_thphoto1.Picture.Assign(BitmapImage);
> end;
> end;
> finally
> ms.Free;
> BitmapImage.Free;
> end;
>
> 방식으로 timge?? 컴포런트에 보여 주고자 했는데 .."jpeg error #52"메시지 가 뜨네요......내일 까지인데......목타네요....
>
> 가르쳐 주시옵서서 고수님들이여~~~
정확히 이해는 안되는데 급하시다니,
저도 이전에 비숫한 경험이 있는것 같아서
비슷한 문제를 다음과 같이 Component를 만들어서 해결 했습니다.
다만, JPEG 형식은 아니었던것 같군요!
unit IDBImage;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBCtrls, db;
type
TIDBImage = class(TDBImage)
private
FOnChange: TNotifyEvent;
procedure PictureChanged(Sender: TObject);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
procedure Register;
implementation
type
TGraphicHeader = record
Count: Word; { Fixed at 1 }
HType: Word; { Fixed at $0100 }
Size: Longint; { Size not including header }
end;
constructor TIDBImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FOnChange := Picture.OnChange;
Picture.OnChange := PictureChanged;
end;
destructor TIDBImage.Destroy;
begin
inherited Destroy;
end;
procedure TIDBImage.PictureChanged(Sender: TObject);
begin
if Assigned(Field) then
begin
if (TBlobField(Field).BLOBSize = 0) or
(not TBlobField(Field).IsNull and TBlobField(Field).IsBLOB and (TBlobField(Field).BLOBSize > SizeOf(TGraphicHeader))) then
begin
FOnChange(Sender)
end else
if Assigned(DataSource) then
begin
DataSource.DataSet.Edit;
TBlobField(Field).Clear;
end;
end;
end;
procedure Register;
begin
RegisterComponents('Data Access', [TIDBImage]);
end;
end.