안녕하세요! 포근한 날씨임다...
버튼을 누르면 임시테이블을 생성하고 서버로부터 'BMT750'라는 테이블에서 필요한 부문만 임시테이블로 INSERT하고 여기에사 몇가지 더 조합을 시키고 다시 생성된 임시테이블로부터 쿼리를 이용한 조회프로그램을 짜려고 하는데....임시테이블로 부터 SELECT할때 ERROR가 발생하는 것 같아요...
임시테이블을 BMT750#로 설정했는데 컴파일하고 프로그램을 조회하는데 'INVALID OBJECT BMT750T'라는 메시지가 나옵니다...뭐가 잘못된 것일까요...여러고수님들의 고견을 기다립니다...그럼 좋은 하루되세요...아래에 제가 작성한 소스를 올립니다..
procedure TForm1.querybitbtn1Click(Sender: TObject);
var
i:integer;
begin
with query1 do
begin
close;
sql.clear;
sql.add('create table bmt750#(');
sql.add('prdcod char(13),');
sql.add('stkid char(2),');
sql.add('subid char(1),');
sql.add('trans char(7),');
sql.add('netinp char(9),');
sql.add('bkrinp char(7),');
sql.add('netoup char(9))');
close;
sql.clear;
sql.add('insert into bmt750#(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');
close;
sql.clear;
sql.add('select prdcod,stkid,subid,trans,netinp,brkinp,netoup');
sql.add('from bmt750#');
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;
end;
end;
왜냐??
SQL은... ADD 시켜준다음에... 반드시... ExecSQL이라는 명령을 내려줘야 합니다.
이 명령이 없이 다시 clear를 시켰으니 결국 임시 테이블 생성을 하지 않은것과
같습니다.
만들지 않은 테이블에다 자료를 삽입하려하니깐 문제가 생기는 겁니다.
그리고 참고로 테이블 이름에 특수문자.. 과연 이게 괜찮은지.. 장담하지 못합니다.
특수문자는 _ 이거 하나로만 하는게 좋지 않을런지요,.....
델이랑파이랑 wrote:
> 안녕하세요! 포근한 날씨임다...
> 버튼을 누르면 임시테이블을 생성하고 서버로부터 'BMT750'라는 테이블에서 필요한 부문만 임시테이블로 INSERT하고 여기에사 몇가지 더 조합을 시키고 다시 생성된 임시테이블로부터 쿼리를 이용한 조회프로그램을 짜려고 하는데....임시테이블로 부터 SELECT할때 ERROR가 발생하는 것 같아요...
> 임시테이블을 BMT750#로 설정했는데 컴파일하고 프로그램을 조회하는데 'INVALID OBJECT BMT750T'라는 메시지가 나옵니다...뭐가 잘못된 것일까요...여러고수님들의 고견을 기다립니다...그럼 좋은 하루되세요...아래에 제가 작성한 소스를 올립니다..
>
> procedure TForm1.querybitbtn1Click(Sender: TObject);
> var
> i:integer;
> begin
> with query1 do
> begin
> close;
> sql.clear;
> sql.add('create table bmt750#(');
> sql.add('prdcod char(13),');
> sql.add('stkid char(2),');
> sql.add('subid char(1),');
> sql.add('trans char(7),');
> sql.add('netinp char(9),');
> sql.add('bkrinp char(7),');
> sql.add('netoup char(9))');
> close;
>
> sql.clear;
> sql.add('insert into bmt750#(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');
> close;
>
> sql.clear;
> sql.add('select prdcod,stkid,subid,trans,netinp,brkinp,netoup');
> sql.add('from bmt750#');
> 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;
> end;
> end;
>