Q&A

  • midas를 이용한 이미지 저장방법?
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"메시지 가 뜨네요......내일 까지인데......목타네요....



가르쳐 주시옵서서 고수님들이여~~~

1  COMMENTS
  • Profile
    HKINTRA 2000.08.17 11:53
    김미경 wrote:

    > 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.