Q&A

  • oracle db를 이용한 이미지파일저장에 관하여
안녕하세요? 질문이 있어서요.

인사기본정보화면에 사원들 사진을 넣으려고 하는데요. oracle상에 table를 생성하였으며 이미지가 들어가는 field는 datatype를 long raw로 잡았구요.

여기에 bmp file를 저장할때는 문제가 없이 잘 되지만 사진이 일그러지고 size가 크다는 단점이 있더군요. 그래서 jpg를 사용하려 했더니(여기서 pimage는 사진이 들어가는 field명임)

table1pimage.loadfromfile(filelistbox1.finename);에서 error이 걸리더군요.



첫번째질문??

왜 bmp file은 모양이 일그러질까요?

두번째질문??

loadfromfile에서는 bmp file만 가능한가요?

이미지 파일을 tif로 하면 괜찮다던데 이것도 loadfromfile에서 error가 나요.



jpg file,tif file를 오라클db에 저장하는법을 갈켜주세요!!!



4  COMMENTS
  • Profile
    이경배 2000.10.18 02:58
    uses절에 JPeg를 추가하시면 에러가 안날겁니다.



    별 도움이...쩝...^^

  • Profile
    최현정 2000.10.18 03:07
    uses문에는 추가가 되었구여.

    jpg file을 저장하려면 이런 에러가 뜨는군여.

    "bitmap image is not valid"

    감사합니다.





    이경배 wrote:

    > uses절에 JPeg를 추가하시면 에러가 안날겁니다.

    >

    > 별 도움이...쩝...^^

  • Profile
    cell 2000.10.18 18:33
    전 아래와 같은 방법으로 그림을 넣었는데요.



    FileName은 open dialog를 통해 파일이름을 받은거고요.

    jpg 일 경우 그냥 저장하고

    bmp 일 경우 jpg로 변환해서 저장합니다.



    If LowerCase(ExtractFileExt(FileName)) = '.jpg' Then Begin

    With Table1 Do Begin

    Insert;

    FieldByName('AssyCode').AsString := fe_AssyCode.Text;

    FieldByName('AssyName').AsString := fe_AssyName.Text;

    FieldbyName('RecDate').AsString := fm_RecDate.Text;

    FieldByName('AssySize').AsString := Copy(fc_SizeCode.Text, 1, Pos('/', fc_SizeCode.Text) - 2);

    FieldByName('AssyPack').AsString := Copy(fc_PackCode.Text, 1, Pos('/', fc_PackCode.Text) - 2);

    if Image1.Picture <> Nil Then

    (FieldByName('AssyDrawing') As TBlobField).LoadFromFile(FileName);

    Try

    Post;

    Except

    fMain.Database1.Rollback;

    MessageDlg('자료등록중 에러 발생 !', mtWarning, [mbOk], 0);

    Exit;

    end;

    end;

    end

    // bmp이면

    else If LowerCase(ExtractFileExt(FileName)) = '.bmp' Then Begin

    bmp := TBitmap.Create;

    jpg := TJPEGImage.Create;

    Mem := TMemoryStream.Create;

    Try

    bmp.LoadFromFile(FileName);

    jpg.Assign(bmp);

    jpg.SaveToStream(mem);

    Mem.Position := 0;

    With Table1 Do Begin

    Insert;

    FieldByName('AssyCode').AsString := fe_AssyCode.Text;

    FieldByName('AssyName').AsString := fe_AssyName.Text;

    FieldbyName('RecDate').AsString := fm_RecDate.Text;

    FieldByName('AssySize').AsString := Copy(fc_SizeCode.Text, 1, Pos('/', fc_SizeCode.Text) - 2);

    FieldByName('AssyPack').AsString := Copy(fc_PackCode.Text, 1, Pos('/', fc_PackCode.Text) - 2);

    if Image1.Picture <> Nil Then

    (FieldByName('AssyDrawing') As TBlobField).LoadFromStream(mem);

    Try

    Post;

    Except

    fMain.Database1.Rollback;

    MessageDlg('자료등록중 에러 발생 !', mtWarning, [mbOk], 0);

    Exit;

    end;

    end;

    Finally

    mem.Free;

    jpg.Free;

    bmp.Free;

    end;

    end

  • Profile
    최현정 2000.10.19 02:58
    답변감사합니다.근데여~~ db를 뭘로 만드신거에여?

    전 oracle에서 만들고 이미지들어가는 필드type를 long raw로 잡았거든요.

    근데 보내주신 메일에선 이미지들어가는 필드type이 tblob type인가여?

    db를 어디서 만든신것인지??

    그 db의 field type중에 tblob이 있는건가요??

    답변부탁드립니다. 빨리요~~~