아래 소스로 기존의 서버에 있는 테이블에서 새로운 서버의 테이블에 사진 및
데이타를 이관하려고 합니다.
폼에는 사진을 제외한 필요한 키 데이타가 DBGried로 보여지지요.
물론 실행 이전에 조회란 부분에서 사진을 포함한 데이타를 Select 해온 상태입니다.
저장작업등은 다 되었는데, 문제가 생겨서요.
기존 서버의 테이블에 사진(bmp)과 사인(jpg)이 같이 저장되어있는데
이걸 구분할 방법이 없어서요.
구분을 해서 jpg면 별도의 작업을하고 bmp이면 bmp로 인식해서 저장시켜야 하는데..
slect해온 사진 데이타가 bmp인지 jpg인지 구별 할 수 있는 방법좀 가르쳐주십시요!
참고로 DBImage 는 안쓰고 코딩으로 넘기려 합니다.
이렇게 부탁드려서 죄송합니다..
procedure Tbc10f.SpeedButton3Click(Sender: TObject); //실행
var curecno : Integer;
FileStream : TFileStream;
jBmp : TBitmap;
kJpg : TJpegImage;
sFileName : String;
imageF : File;
buffer : PChar;
JpegHeader : TJpegHeader;
begin
ProgressBar1.Visible := True;
ProgressBar1.Position := 0;
curecno := 0;
Query1.DisableControls;
Query1.First;
While Not Query1.eof do
begin
inc(curecno);
ProgressBar1.Position := (ProgressBar1.Max * curecno) div
Query_Work.FieldByName('cnt').AsInteger;
Application.ProcessMessages;
FileStream := TFileStream.Create(_JPGPHOTO, fmCreate);
//이미지 사진 작업
try
TBlobField(Query1.FieldByName('PHOTO')).SaveToStream
(FileStream);
finally
FileStream.Free;
end;
=> 이 부분에서 bmp인지 jpg인지 판단해야 할거 같은데..제 생각엔..
{아래 세 문단은 화질문제 때문에 jpg를 Bmp로 바꾸었다가 jpg로 다시 불러오기 위함}
kJpg := TJpegImage.Create;
kJpg.LoadFromFile(_JPGPHOTO); => 임의의 사진 디렉토리명C:BCPOTO.JPG)
kJpg.SaveToFile(_JPGPHOTO);
kjpg.Free;
jBmp := TBitmap.Create;
jBmp.LoadFromFile(_JPGPHOTO);
jBmp.Assign(kJpg);
jBmp.SaveToFile(_BMPPHOTO);
jBmp.Free;
kJpg := TJpegImage.Create;
jBmp.LoadFromFile(_BMPPHOTO);
kJpg.Assign(JBmp);
kJpg.SaveToFile(_JPGPHOTO);
kjpg.Free;
{여기까지}
DB_bc.StartTransaction;
With Query_Insert do
begin
Close;
SQL.Clear;
SQL.Add('insert into tbl_photo
(resi_biz_no,photo_kind,machine_clf,');
SQL.Add(' crt_dt,bank_cd,photo,chg_dt) ');
SQL.Add(' values
(:r_no,''02'',''1'',:c_dt,:bank,:phto,:dt)');
ParamByName('r_no').AsString := Query1.FieldByName
('resi_biz_no').AsString; //주민번호
ParamByName('c_dt').AsString := Query1.FieldByName
('crt_dt').AsString; //생성일자
ParamByName('bank').AsString := Query1.FieldByName
('bank_cd').AsString; //은행코드
ParamByName('phto').LoadFromFile(_JPGPHOTO,ftBlob); // 사진
ParamByName('dt').AsDateTime := Now; //수정일자
try
ExecSQL;
DB_bc.Commit;
except on E:EDBEngineError do
begin
if StrToInt(Copy(E.Message, Pos('ORA', E.Message) + 4, 5))
= 1 then //이부분은 중복된키가 있으면 넘어가려구여~
begin
DB_bc.Rollback;
Query1.Next;
Continue;
end; //if~
OracleError(E); //에러 메세지 띄우는 함수
DB_bc.Rollback;
end;
end;
end; //with~ Insert
Query1.Next;
end; //while
Query1.EnableControls;
ProgressBar1.Visible := False;
Application.ProcessMessages;
MessageDlg('작업이 완료되었습니다!',mtInformation,[mbOK],0);