Q&A

  • 임시테이블의 획득과 삭제에 대해.....
안녕하세요! 포근한 날씨임다...

버튼을 누르면 임시테이블을 생성하고 서버로부터 'BMT750'라는 테이블에서 필요한 부문만 임시테이블로 INSERT하고 여기에사 몇가지 더 조합을 시키고 다시 생성된 임시테이블로부터 쿼리를 이용한 조회프로그램을 짜려고 합니다..임시테이블을 생성하고 drop은 되는데....다시 프로그램을 돌릴때 처음부문의 drop에서 테이블이 존재하지 않는 다는 ERROR메시지가 나옵니다....

임시테이블 이름을 획득해서 존재하면 삭제하고 존재하지 않으면 다음 부문으로 돌려야 겠는데 좋은 방법(임시 테이블이 이미 존재하는지(아님 테이블 이름 획득하는 방법)의 획득 여부) 이 있으면 좀 갈켜주세요.. 많은 도움 바랍니다....

아래에 제가 작성한 소스올립니다..



procedure TForm1.querybitbtn1Click(Sender: TObject);

var

i:integer;

begin

with query1 do

begin

close;

sql.clear;

sql.add('drop table bmt750t'); //요부문에서 임시테이블이 이미 존해하면 DROP을

// 시키고 존재하지 않으면 다음루틴으로 돌리려 함

execsql;





close;

sql.clear;

sql.add('create table bmt750t(');

sql.add('prdcod char(13),');

sql.add('stkid char(2),');

sql.add('subid char(1),');

sql.add('trans numeric(9),');

sql.add('netinp numeric(9),');

sql.add('brkinp numeric(7),');

sql.add('netoup numeric(9))');

execsql;

close;



sql.clear;

sql.add('insert into bmt750t(prdcod,stkid,subid,trans,netinp,brkinp,netoup)');

sql.add(' select prdcod,stkid,subid,trans,netinp,brkinp,netoup');

sql.add(' from bmt750');

sql.add('where stkyr+stkmm+stkdd>=20001129');

execsql;

close;



sql.clear;

sql.add('select prdcod,stkid,subid,trans,netinp,brkinp,netoup');

sql.add('from bmt750t');

open;

first;

i:=1;

stringgrid1.rowcount:=recordcount+1;

while not eof do

begin

stringgrid1.cells[0,i]:=fieldbyname('prdcod').asstring;

stringgrid1.cells[1,i]:=fieldbyname('stkid').asstring;

stringgrid1.cells[2,i]:=fieldbyname('subid').asstring;

stringgrid1.cells[3,i]:=fieldbyname('trans').asstring;

stringgrid1.cells[4,i]:=fieldbyname('netinp').asstring;

stringgrid1.cells[5,i]:=fieldbyname('brkinp').asstring;

stringgrid1.cells[6,i]:=fieldbyname('netoup').asstring;

next;

inc(i);

end;

close;



sql.clear;

sql.add('drop table bmt750t');

execsql;

close;



end;

end;





2  COMMENTS
  • Profile
    김종언 2000.12.02 00:40
    아이구 이런.. 또 나아니면 답해줄사람이 없을것 같네요....

    테이블의 존재 여부를 알아오는 방법이 있습니다...

    그부분을 적어드리죠... 아까 물어볼때 같이 물어보시지...

    저는 이걸 함수를 만들어서 사용했습니다.





    테이블이. 존재하는가?



    function Tform1.havingtable(table_name : String) : integer;

    var

    itemlist : Tstringlist;

    begin

    itemlist := TStringList.Create;

    Session.GetTableNames('recons','',false,false,itemlist);

    Result := itemlist.IndexOf(table_name);

    end;





    위를 보면 이해가 가시겠죠? recons는 DB입니다 DB에서 itemlist가 바로... 테이블의 목록입니다. 테이블목록에서... 아까 전달받은 테이블네임... 이 있는가 확인하고..

    값을 전달해줍니다.. 반환값은 테이블이 없을때.. -1 입니다..





    델이랑파이랑 wrote:

    > 안녕하세요! 포근한 날씨임다...

    > 버튼을 누르면 임시테이블을 생성하고 서버로부터 'BMT750'라는 테이블에서 필요한 부문만 임시테이블로 INSERT하고 여기에사 몇가지 더 조합을 시키고 다시 생성된 임시테이블로부터 쿼리를 이용한 조회프로그램을 짜려고 합니다..임시테이블을 생성하고 drop은 되는데....다시 프로그램을 돌릴때 처음부문의 drop에서 테이블이 존재하지 않는 다는 ERROR메시지가 나옵니다....

    > 임시테이블 이름을 획득해서 존재하면 삭제하고 존재하지 않으면 다음 부문으로 돌려야 겠는데 좋은 방법(임시 테이블이 이미 존재하는지(아님 테이블 이름 획득하는 방법)의 획득 여부) 이 있으면 좀 갈켜주세요.. 많은 도움 바랍니다....

    > 아래에 제가 작성한 소스올립니다..

    >

    > procedure TForm1.querybitbtn1Click(Sender: TObject);

    > var

    > i:integer;

    > begin

    > with query1 do

    > begin

    > close;

    > sql.clear;

    > sql.add('drop table bmt750t'); //요부문에서 임시테이블이 이미 존해하면 DROP을

    > // 시키고 존재하지 않으면 다음루틴으로 돌리려 함

    > execsql;

    >

    >

    > close;

    > sql.clear;

    > sql.add('create table bmt750t(');

    > sql.add('prdcod char(13),');

    > sql.add('stkid char(2),');

    > sql.add('subid char(1),');

    > sql.add('trans numeric(9),');

    > sql.add('netinp numeric(9),');

    > sql.add('brkinp numeric(7),');

    > sql.add('netoup numeric(9))');

    > execsql;

    > close;

    >

    > sql.clear;

    > sql.add('insert into bmt750t(prdcod,stkid,subid,trans,netinp,brkinp,netoup)');

    > sql.add(' select prdcod,stkid,subid,trans,netinp,brkinp,netoup');

    > sql.add(' from bmt750');

    > sql.add('where stkyr+stkmm+stkdd>=20001129');

    > execsql;

    > close;

    >

    > sql.clear;

    > sql.add('select prdcod,stkid,subid,trans,netinp,brkinp,netoup');

    > sql.add('from bmt750t');

    > open;

    > first;

    > i:=1;

    > stringgrid1.rowcount:=recordcount+1;

    > while not eof do

    > begin

    > stringgrid1.cells[0,i]:=fieldbyname('prdcod').asstring;

    > stringgrid1.cells[1,i]:=fieldbyname('stkid').asstring;

    > stringgrid1.cells[2,i]:=fieldbyname('subid').asstring;

    > stringgrid1.cells[3,i]:=fieldbyname('trans').asstring;

    > stringgrid1.cells[4,i]:=fieldbyname('netinp').asstring;

    > stringgrid1.cells[5,i]:=fieldbyname('brkinp').asstring;

    > stringgrid1.cells[6,i]:=fieldbyname('netoup').asstring;

    > next;

    > inc(i);

    > end;

    > close;

    >

    > sql.clear;

    > sql.add('drop table bmt750t');

    > execsql;

    > close;

    >

    > end;

    > end;

    >

    >

  • Profile
    델이랑파이랑 2000.12.02 01:12
    김종언 님...

    정말 감사드려요...덕분에 유용하게 프로그래밍하고 있습니다..

    김종언님에게는 자그마한 부문이 저에게는 큰 도움이 되고 있네요....

    앞으로도 많은 조언과 도움말 부탁드릴께요....

    그럼 좋은 하루되세요...





    김종언 wrote:

    > 아이구 이런.. 또 나아니면 답해줄사람이 없을것 같네요....

    > 테이블의 존재 여부를 알아오는 방법이 있습니다...

    > 그부분을 적어드리죠... 아까 물어볼때 같이 물어보시지...

    > 저는 이걸 함수를 만들어서 사용했습니다.

    >

    >

    > 테이블이. 존재하는가?

    >

    > function Tform1.havingtable(table_name : String) : integer;

    > var

    > itemlist : Tstringlist;

    > begin

    > itemlist := TStringList.Create;

    > Session.GetTableNames('recons','',false,false,itemlist);

    > Result := itemlist.IndexOf(table_name);

    > end;

    >

    >

    > 위를 보면 이해가 가시겠죠? recons는 DB입니다 DB에서 itemlist가 바로... 테이블의 목록입니다. 테이블목록에서... 아까 전달받은 테이블네임... 이 있는가 확인하고..

    > 값을 전달해줍니다.. 반환값은 테이블이 없을때.. -1 입니다..

    >

    >

    > 델이랑파이랑 wrote:

    > > 안녕하세요! 포근한 날씨임다...

    > > 버튼을 누르면 임시테이블을 생성하고 서버로부터 'BMT750'라는 테이블에서 필요한 부문만 임시테이블로 INSERT하고 여기에사 몇가지 더 조합을 시키고 다시 생성된 임시테이블로부터 쿼리를 이용한 조회프로그램을 짜려고 합니다..임시테이블을 생성하고 drop은 되는데....다시 프로그램을 돌릴때 처음부문의 drop에서 테이블이 존재하지 않는 다는 ERROR메시지가 나옵니다....

    > > 임시테이블 이름을 획득해서 존재하면 삭제하고 존재하지 않으면 다음 부문으로 돌려야 겠는데 좋은 방법(임시 테이블이 이미 존재하는지(아님 테이블 이름 획득하는 방법)의 획득 여부) 이 있으면 좀 갈켜주세요.. 많은 도움 바랍니다....

    > > 아래에 제가 작성한 소스올립니다..

    > >

    > > procedure TForm1.querybitbtn1Click(Sender: TObject);

    > > var

    > > i:integer;

    > > begin

    > > with query1 do

    > > begin

    > > close;

    > > sql.clear;

    > > sql.add('drop table bmt750t'); //요부문에서 임시테이블이 이미 존해하면 DROP을

    > > // 시키고 존재하지 않으면 다음루틴으로 돌리려 함

    > > execsql;

    > >

    > >

    > > close;

    > > sql.clear;

    > > sql.add('create table bmt750t(');

    > > sql.add('prdcod char(13),');

    > > sql.add('stkid char(2),');

    > > sql.add('subid char(1),');

    > > sql.add('trans numeric(9),');

    > > sql.add('netinp numeric(9),');

    > > sql.add('brkinp numeric(7),');

    > > sql.add('netoup numeric(9))');

    > > execsql;

    > > close;

    > >

    > > sql.clear;

    > > sql.add('insert into bmt750t(prdcod,stkid,subid,trans,netinp,brkinp,netoup)');

    > > sql.add(' select prdcod,stkid,subid,trans,netinp,brkinp,netoup');

    > > sql.add(' from bmt750');

    > > sql.add('where stkyr+stkmm+stkdd>=20001129');

    > > execsql;

    > > close;

    > >

    > > sql.clear;

    > > sql.add('select prdcod,stkid,subid,trans,netinp,brkinp,netoup');

    > > sql.add('from bmt750t');

    > > open;

    > > first;

    > > i:=1;

    > > stringgrid1.rowcount:=recordcount+1;

    > > while not eof do

    > > begin

    > > stringgrid1.cells[0,i]:=fieldbyname('prdcod').asstring;

    > > stringgrid1.cells[1,i]:=fieldbyname('stkid').asstring;

    > > stringgrid1.cells[2,i]:=fieldbyname('subid').asstring;

    > > stringgrid1.cells[3,i]:=fieldbyname('trans').asstring;

    > > stringgrid1.cells[4,i]:=fieldbyname('netinp').asstring;

    > > stringgrid1.cells[5,i]:=fieldbyname('brkinp').asstring;

    > > stringgrid1.cells[6,i]:=fieldbyname('netoup').asstring;

    > > next;

    > > inc(i);

    > > end;

    > > close;

    > >

    > > sql.clear;

    > > sql.add('drop table bmt750t');

    > > execsql;

    > > close;

    > >

    > > end;

    > > end;

    > >

    > >