^_^ 임프님의 지적에 뜨끔하는군요..
제가 맘은 급하고 풀리지는 않고 참 답답한 맘에 소스를 두서 없이 올렸군요.
그래서 다시 간단하게 문제점을 올립니다.
기본적으로 바라는 형태는 오라클 테이블 (Xtable)의 어떤 데이타들 약 100,000개의 레코드들을
파이어버드의 Ytable로 인서트 하는 것입니다.
델파이를 만져본지 몇개월밖에 되지 않은 터라 어떻게 해야 될지
잘 모르겠군요
기본적인 방법에 대해 설명을 주시면 감사하겠습니다.
예를 들어 어떤 콤퍼넌트를 가지고 연결하고 인서트하면 된다는 식의
기본적인 형태를 설명해 주시면 도움이 될 것입니다.
여러분들의 의견을 기다립니다.
박지훈.임프 님이 쓰신 글 :
: 무작정 전체 소스를 몽땅 올려놓고는, '어디서 에러가 나는지부터 시작해서 원인까지 다 찾아봐라..' 라는 뜻 맞습니까?
:
: 급하신 사정도 있을 수 있겠지만, 질문하실 때도 에티켓이 있고, 굳이 에티켓을 따지지 않더라도 적어도 어느 부분에서 어떻게 했더니 어떤 문제가 발생하더라, 라고 써주셔야 문제에 접근할 수 있지 않겠습니까. 답변을 쓰시는 분들이 다른 할 일도 없이 오직 하루종일 답변만 하는 것도 아니고 말이죠. 게다가 보는 입장에서는 님과 달리 해당 데이터베이스를 가진 것도 아니니 당면한 님보다 더 문제를 찾기 힘듭니다. 이렇게 소스만 올려놓고 수정해달라고 하면 답변해드리려고 보던 분들도 막막해집니다.
:
: 구체적인 상황을 설명해주세요.
:
:
: 초보 델파이어 님이 쓰신 글 :
: : 오라클 데이타를 파이어버드로 옮길려고 하는데...
: : 먼가 계속 에러를 띄우는 군요..
: : 고수님님들의 조언을 바랍니다.
: :
: : 아래는 간략한 소스입니다.
: :
: : Database1, IBDatabase1 설정함
: :
: : procedure TForm1.Button1Click(Sender: TObject);
: : var
: : i,j,k: Integer;
: : cFid,cMarc,subj,pan ,indextext,abstext,contentsTEXT,LogFileName,ErrMsg: String;
: : ErrLogfile: TextFile;
: : sl: TStringList;
: :
: : begin
: : try
: : try
: : //실제 프로세스 시작
: : IBTransaction1.Active := True;
: :
: : if MessageDlg('업데이트하시겠습니까?', mtConfirmation,[mbYes, mbNo], 0) = mrYes then begin
: : cMarc:='';
: : //트랜잭션 시작
: : IBTransaction1.StartTransaction;
: : cFid := FormatDateTime('yymmddhhmmsszzz', Now);
: : k:=1;
: : memo1.Clear;
: : for i:=strtoint(Edit1.Text) to strtoint(Edit2.Text) do begin
: :
: : cMarc :='';
: :
: : Query1.Close;
: : Query1.SQL.Clear;
: : Query1.SQL.Add('select * from Ttable where rownum = :crow');
: : Query1.ParamByName('crow').asstring := inttostr(i);
: : Query1.Open;
: : Query1.FetchAll;
: :
: : cFid :='';
: : if Query1.RecordCount > 0 then begin
: :
: :
: : IBQuery1.Close;
: : IBQuery1.SQL.BeginUpdate;
: : IBQuery1.SQL.Add('Insert into test_MARC(FID, GG)');
: : IBQuery1.SQL.Add(' values (:FID, :GG)');
: : IBQuery1.SQL.EndUpdate;
: : IBQuery1.ParamByName('FID').asstring := trim(Query1.fieldbyname('FID').AsString);
: : IBQuery1.ParamByName('GG').AsBlob := trim(Query1.fieldbyname('GG').AsString);
: :
: : IBQuery2.Close;
: : IBQuery2.SQL.BeginUpdate;
: : IBQuery2.SQL.Add('Insert into test_CONTROL(FID,RDATE');
: : IBQuery2.SQL.Add(' values (:FID,:RDATE)');
: : IBQuery2.SQL.EndUpdate;
: : IBQuery2.ParamByName('FID').asstring := trim(Query1.fieldbyname('FID').AsString);
: : IBQuery2.ParamByName('RDATE').AsDateTime := NOW;
: :
: :
: : IBQuery1.Prepare;
: : IBQuery2.Prepare;
: : IBQuery1.ExecSQL;
: : IBQuery2.ExecSQL;
: :
: :
: : label3.Caption:=inttostr(i);
: : label3.Refresh;
: : inc(k);
: : end; //if Query1.RecordCount > 0 then begin
: : end; // for i:=strtoint(trim(Edit1.Text))
: : //트랜잭션 끝
: : IBTransaction1.CommitRetaining;
: : exit;
: : end
: : else begin
: : showmessage('취소하셨습니다.!!');
: : exit; // if
: : end;
: :
: : //실제 프로세스 종료
: : except
: : on err:exception do
: : begin
: : LogFileName := ExtractFilePath(Application.ExeName)
: : + ExtractFileName(Application.ExeName) + '_' +FormatDateTime('yyyy"년"mm"월"dd"일"',Now) + '.log';
: :
: : // 민약, 에러로그가 없으면 에러로그 파일을 생성
: : if Not FileExists(LogFileName) then FileClose(FileCreate(LogFileName));
: :
: : ErrMsg := '[' + FormatDateTime('YYYY:MM:DD:HH:NN', Now) + ']['+ label3.Caption +'] /';
: :
: : AssignFile(ErrLogfile, LogFileName);
: : Append(ErrLogfile);
: :
: : Writeln(ErrLogfile, ErrMsg+ ' 데이타 저장오류 -'+err.message);
: : ShowMessage('작업이 중지되었습니다. Data확인요망-'+err.message);
: : CloseFile(ErrLogfile);
: : //IBTransaction1.Rollback;
: :
: : exit;
: : Application.Terminate;
: : end;
: : end; //try
: : finally
: : Query1.Close;
: : IBQuery1.Close;
: : IBQuery2.Close;
: : Query1.Free;
: : IBQuery1.Close;
: : IBQuery2.Close;
: : Database1.Close;
: : IBDatabase1.Close;
: : IBTransaction1.Active := false;
: : end; //try
: :
: : end;
|