Q&A

  • Blob field의 image 저장에 대하여..(왕초보)
물품관리 프로그램에 사진을 넣기 위해서 다음 소스를 사용했습니다.



procedure TF_regi.Button1Click(Sender: TObject);

begin

if OpenPictureDialog1.Execute then begin

if T_regi.State in [DsBrowse] then T_regi.Edit;

OpenPictureDialog1.FileName;

DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);



end;

end;



이렇게 한다음 table을 Post했는데요.

저장도 잘되고 이미지 조회도 잘되는데...몇가지 문제가 있더군요.



database.MB라는 file이 계속 커지는데여...저장하려는 사진이 많아서 너무 커지면

않될것 같습니다. 그래서 이미지의 경로와 파일명만 따로 저장하고 그걸 불러서 보여주는 방법을 택하고 싶은데 어렵내여...



그리고 또한가지 bmp 밖에 않되더라구여..다른 type의 이미지 까지 불러올수 있는 방법

좀 갈켜 주세여..



너무 쉬운 질문인지 몰라도 ...여러 고수님들..부탁드릴께여.



1  COMMENTS
  • Profile
    강호규 2000.08.06 00:52
    저도 이곳에서 자료를 찾아 어제 완성한 부분인데요..

    시간이 없어 코드를 그냥 올립니다. 양해바랍니다.

    아래는 JPG를 테이블과 TImage 콤포넌트에서

    서로 주고 받는 소스입니다.



    TDBImage를 직접 사용하면 화면에 보여질 때

    이미지 크기가 큰 것은 제대로 보이질 않더군요

    그래서 아래의 방법을 이용하면 잘됩니다.



    다른 자료는 검색을 해보세요!



    -----------------------------

    1.JPG --> DB 저장하기

    -----------------------------

    procedure TFormDocSign.BtnSaveClick(Sender: TObject);

    var JobMode: TTableJobMode;

    JpegImage: TJpegImage;

    MS: TMemoryStream;

    begin

    BtnSave.Enabled := False;



    eDOCLICNO.Text := Trim(eDOCLICNO.Text );

    eNAME.Text := Trim(eNAME.Text);



    try

    if Length(eDOCLICNO.Text) < 0 then begin

    eDOCLICNO.SetFocus;

    raise EUserDefError.CreateHelp('면허번호는 필수입력 항목입니다.'+#10+'재입력하십시요.', -1)

    end;



    JobMode := TableJobMode('DOCSIGN',eDOCLICNO.Text);

    with DM.Query do begin

    SQL.Clear;



    if JobMode = tjmInsert then begin

    SQL.Add('insert into DOCSIGN');

    SQL.Add('(DOCLICNO, NAME, SIGN)');

    SQL.Add('values(:DOCLICNO, :NAME, :SIGN)');

    end

    else if JobMode = tjmUpdate then begin

    SQL.Add('update DOCSIGN set');

    SQL.Add('NAME=:NAME,SIGN=:SIGN');

    SQL.Add('where DOCLICNO=:DOCLICNO');

    end

    else begin

    raise EUserDefError.CreateHelp('', -1)

    end;



    ParamByName('DOCLICNO').AsString := eDOCLICNO.Text;

    ParamByName('NAME').AsString := eNAME.Text;



    JpegImage := TJpegImage.Create;

    MS := TMemoryStream.Create;



    if ImageMap.Picture.Graphic = nil then begin

    ParamByName('SIGN').Assign(ImageMAP.Picture.Bitmap); //널일경우

    end

    else begin

    JpegImage.Assign(ImageMap.Picture.Graphic);

    MS.Position:=0;

    JpegImage.SaveToStream(MS);

    ParamByName('SIGN').LoadFromStream(MS,ftBlob);

    end;

    JpegImage.Destroy;

    MS.Destroy;



    DM.DB.StartTransaction;

    ExecSQL;

    DM.DB.Commit;

    GetQueryList('DOCLICNO',eDOCLICNO.Text);

    end;

    except

    on E: Exception do begin

    if DM.DB.InTransaction then DM.DB.Rollback;

    MessageBox(E.Message+#10#10+'Error Code : '+IntToStr(E.HelpContext),'오류', 16);

    end;

    end;

    BtnSave.Enabled := True;

    end;



    -----------------------------

    [2. DB --> TImage]

    -----------------------------

    procedure TFormDocSign.DBGridListRowChange(Sender: TObject);

    var

    BitmapImage: TJPEGImage;

    MS: TMemoryStream;

    begin

    with DBGridList.DataSource.DataSet do begin

    if IsEmpty then exit;



    eDOCLICNO.Text := FieldByName('DOCLICNO').AsString;

    eNAME.Text := FieldByName('NAME').AsString;



    if FieldByName('SIGN').IsNull then begin

    ImageMap.Picture.Assign(nil);

    end

    else begin

    BitmapImage := TJPEGImage.Create;

    MS := TMemoryStream.Create;

    (FieldByName('SIGN') As TBlobField).SaveToStream(MS);

    MS.Position:=0;

    BitmapImage.LoadFromStream(MS);

    ImageMap.Picture.Assign(BitmapImage);



    BitmapImage.Destroy;

    MS.Destroy;

    ImageMap.Stretch := PanelEdit.Height < ImageMap.Picture.Height;

    end;

    end;

    end;





    --------------------- end of 답변 ---------------



    이명근 wrote:

    > 물품관리 프로그램에 사진을 넣기 위해서 다음 소스를 사용했습니다.

    >

    > procedure TF_regi.Button1Click(Sender: TObject);

    > begin

    > if OpenPictureDialog1.Execute then begin

    > if T_regi.State in [DsBrowse] then T_regi.Edit;

    > OpenPictureDialog1.FileName;

    > DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

    >

    > end;

    > end;

    >

    > 이렇게 한다음 table을 Post했는데요.

    > 저장도 잘되고 이미지 조회도 잘되는데...몇가지 문제가 있더군요.

    >

    > database.MB라는 file이 계속 커지는데여...저장하려는 사진이 많아서 너무 커지면

    > 않될것 같습니다. 그래서 이미지의 경로와 파일명만 따로 저장하고 그걸 불러서 보여주는 방법을 택하고 싶은데 어렵내여...

    >

    > 그리고 또한가지 bmp 밖에 않되더라구여..다른 type의 이미지 까지 불러올수 있는 방법

    > 좀 갈켜 주세여..

    >

    > 너무 쉬운 질문인지 몰라도 ...여러 고수님들..부탁드릴께여.

    >

    • Hoon Reader
      2000.08.07 09:41
      날자가 문자 타입이면 숫자로 Casting하는건 불가능하죠. '-'를 찾아서 없애고 다시 Long으로 캐스팅을 ...
    • 강호규
      2000.08.07 04:05
      박동원 wrote: > 파라독스 DB를 사용하고 있습니다. > 쿼리를 사용하여 두날짜의 차이를 구하고자 합니다...
    • 빈거울
    • 2000.08.07 00:56
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 모승열
      2000.08.08 20:46
      빈거울 wrote: > 안녕하세요. > WM_COPYDATA 를 사용해서 데이타를 주고 받을 때. > 데이타를 던진 쪽을...
    • Hoon Reader
      2000.08.07 09:56
      일단 Data는 제대로 받는지 궁금합니다. CopyMemory(@data, Message.CopyDataStruct^.lpData, SizeOf(T...
    • 빈거울
      2000.08.07 18:25
      FindWindow에서 잘 찾습니다. 그리고 데이타도 잘 넘어 오고요. 그리고. 받는 부분을 메인에 놓은 것이 ...
    • 한비광
    • 2000.08.07 00:18
    • 3 COMMENTS
    • /
    • 0 LIKES
    • Hoon Reader
      2000.08.07 10:16
      ord는 byte 크기 밖에 지원안합니다. 즉, 256이 최고수라는 거죠. byte 크기는 Byte, Char 그리고 순...
    • 4master
      2000.08.07 03:41
      한비광 wrote: > 안녕하세요 > > 델파이 시작 한지 하루 된 왕초보 델피언 입니다 > > 자꾸 기본 ...
    • 모승열
      2000.08.07 03:22
      한비광 wrote: > 안녕하세요 > > 델파이 시작 한지 하루 된 왕초보 델피언 입니다 > > 자꾸 기본 ...
    • 이병돈
    • 2000.08.06 22:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Hoon Reader
      2000.08.07 10:44
      델파이 4.0 버젼에서는 Table에 DBComboBox와 연결이 잘 안되었음. 엄청나게 테스트 해보았는데도 잘 안되...
    • 4master
      2000.08.06 22:37
      이병돈 wrote: > dbcombobox를 사용해서 table의 특정 field 값을 선택할수 있도록 할려고 하는데.. > co...
    • 대희
    • 2000.08.06 21:22
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Hoon Reader
      2000.08.07 10:38
      garbage value (쓰레기값) 이라 부릅니다. 즉 초기화를 안하면 이전의 어떤 프로그램이 사용하던 그 값이 ...
    • 4master
      2000.08.06 22:32
      한비광 wrote: > 질문이 하나 더 있는데요 > > count := 0; > > 이런 식으로 초기화를 않해 주면 ...
    • 한비광
    • 2000.08.06 20:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 노을
      2000.08.06 23:21
      안녕하세요 노 을 입니다. 아래 답변을 보니 Block 을 나타낸다고 했죠? ^^.. 저는 추가적으로 좀더 ...
    • 4master
      2000.08.06 22:22
      한비광 wrote: > 중첩 for 문에서 보면 > 첫번째 for 에서는 begin 을 쓰는데 두번째 for 에서는 begin ...
    • parkisu
    • 2000.08.06 08:56
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 어린왕자
      2000.08.08 03:43
      안녕하세요.. 님의 말씀은 이런거죠... 어떤식이 있는데.. 상황에 따라서 그식이 변한다는거죠.. 예...
    • Hoon Reader
      2000.08.07 10:34
      하고자 하는 바를 충분히 이해합니다. 님이 이해하기 어렵게 좀 어렵게 설명하겠습니다. 그런 것이 ...
    • 강인규
      2000.08.07 00:54
      뭘만드시려는지는 잘 모르겠지만 함 적어봅니다. > AVERAGE(A,5)라는 주식분석용 이동평균함수를 만...
    • 노을
      2000.08.06 23:39
      안녕하세요 노 을 입니다. 음 식의 복사?.. 라는 의미를 모르겠내요... 일단 Average(A,5); ...
    • 타락천사
      2000.08.06 23:24
      안녕하세여. 타락임다...^^ 질문만 가지곤 어떻게 구현해야 할지 모르겠지만... 델파이에서 안된다구...
    • 김미좌
    • 2000.08.06 06:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 4master
      2000.08.06 07:20
      김미좌 wrote: > query를사용하여 선택된 값을 메모에 입력시키는데... > > query1.open > 1) > memo...
    • 김미좌
      2000.08.06 07:41
      4master wrote: > 김미좌 wrote: > > query를사용하여 선택된 값을 메모에 입력시키는데... > > > > q...
    • 4master
      2000.08.06 07:24
      지친초보 wrote: > 파라독스7.0 델파이4.0 win98 > > 단순하게 전에 있던 데이터베이스의 필드를 다른 ...
    • 4master
      2000.08.06 07:35
      왕초보 wrote: > Key 값이 중복되지도 않구요. Key Violation Error 가 난 후에 다시 들어가보면 > 데이...
    • 강호규
      2000.08.06 00:57
      이럴 수도 있습니다. Key Violation Error 가 났다는 것은 대상 테이블에 중복된 값을 입력하려 할 때 발...
    • 이명근
    • 2000.08.06 00:29
    • 1 COMMENTS
    • /
    • 1 LIKES
    • 강호규
      2000.08.06 00:52
      저도 이곳에서 자료를 찾아 어제 완성한 부분인데요.. 시간이 없어 코드를 그냥 올립니다. 양해바랍니다. ...
    • 소금이
      2000.08.07 19:04
      강호규 wrote: > [질문] > 일반적으로 오라클DB에 접속하여 쿼리를 하게 되면 > 커서가 "모래시계+SQL"...
    • 강호규
      2000.08.09 05:24
      소금이 wrote: > 강호규 wrote: > > [질문] > > 일반적으로 오라클DB에 접속하여 쿼리를 하게 되면 > >...
    • 김일영
      2000.08.09 12:04
      상당히 어렵지 않나 싶네요. 제가 예전에 찾아본 기억으론 커서 바꾸는 부분이 TQuery의 멤버 함수 내에 ...
    • 권오정
    • 2000.08.05 23:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황선희
      2000.08.06 00:27
      권오정 wrote: > data가 > aaa a 100 > bbb a 100 > ccc b 200 > ddd c 100 > 이 ...
    • 호야
    • 2000.08.05 21:08
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2000.08.05 21:23
      호야 wrote: > 스트링그리드에서 여러행을 선택해서 > 붙여넣기를 할려고 합니다. > 이사이트를 밤세서 ...
    • 호야
      2000.08.08 01:28
      타락천사 wrote: > 호야 wrote: > > 스트링그리드에서 여러행을 선택해서 > > 붙여넣기를 할려고 합니다...
    • 타락천사
      2000.08.09 08:54
      즐거운 하루 되세여.. 지가 넘 바뻐서뤼...^^ 타락천사......
    • 호야
      2000.08.07 03:25
      뻥이 아닙니다. 제목이 뭐죠? 한라인을 추가/삭제하는걸 말하는 겁니까? 타락천사 wrote: > 호야 wro...
    • 김만성
    • 2000.08.05 21:01
    • 3 COMMENTS
    • /
    • 0 LIKES
    • parkisu
      2000.08.06 07:40
      김만성 wrote: > > 안녕하세요...~ 델피 가족 여러분.. > 오늘 또 질문 하나 올립니다.. > 이런건...
    • 타락천사
      2000.08.05 21:25
      김만성 wrote: > > 안녕하세요...~ 델피 가족 여러분.. > 오늘 또 질문 하나 올립니다.. > 이런건...
    • 김만성
      2000.08.06 04:24
      좀더 자세히 설명을 해주시겠어요.. " 쿼리를 하나 더 만드세요.. " 이 한마디만으로는 감이 오질...
    • azure
    • 2000.08.05 20:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2000.08.05 21:27
      안녕하세여.. 타락임다...^^ ADO를 쓰셨나여? 직접 Excel로 보는것 보단, ODBC가 빠르고, 그거보단 ...