Q&A

  • 소스좀 보시고 도움을
아래 소스로 기존의 서버에 있는 테이블에서 새로운 서버의 테이블에 사진 및

데이타를 이관하려고 합니다.



폼에는 사진을 제외한 필요한 키 데이타가 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);



0  COMMENTS