물품관리 프로그램에 사진을 넣기 위해서 다음 소스를 사용했습니다.
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의 이미지 까지 불러올수 있는 방법
좀 갈켜 주세여..
너무 쉬운 질문인지 몰라도 ...여러 고수님들..부탁드릴께여.
시간이 없어 코드를 그냥 올립니다. 양해바랍니다.
아래는 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의 이미지 까지 불러올수 있는 방법
> 좀 갈켜 주세여..
>
> 너무 쉬운 질문인지 몰라도 ...여러 고수님들..부탁드릴께여.
>