임시테이블생성후 프로그램 다시돌릴때
1.이미 bmt750t(임시테이블)이 존재한다는 메시지와
2.Field_el is of unknowm type라는 메시지가 발생합니다...뭐가 잘못된건지 통 감이 잡히질 않네요.....바쁘시더라도 꼭 좀 봐주세요..며칠째 고민중입니다..
첫번째에러는 함수값의 반환에서 문제가 있는건지...
두번째에러는 임시테이블의 필드정의와 파라미터로 값을 insert할때이 타입이 잘못된건지...쩝 ..감이 잡히지 않네요...
아래는 전체소스입니다.
type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
Bevel1: TBevel;
Label1: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
CheckBox1: TCheckBox;
Label2: TLabel;
ComboBox4: TComboBox;
Label3: TLabel;
ComboBox5: TComboBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Label4: TLabel;
ComboBox6: TComboBox;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
StringGrid1: TStringGrid;
querybitbtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
DataSource1: TDataSource;
Query1: TQuery;
Database1: TDatabase;
Query2: TQuery;
procedure BitBtn4Click(Sender: TObject);
procedure querybitbtn1Click(Sender: TObject);
function havingtable(table_name:string):integer;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
application.terminate;
end;
procedure TForm1.querybitbtn1Click(Sender: TObject);
var
i:integer;
begin
with query1 do
begin
if havingtable('bmt750t')<> -1 then // 임시 테이블(bmt750t)이 있으면
begin
close;
sql.clear;
sql.add('drop table bmt750t');
execsql;
end;
close;
sql.clear;
sql.add('create table bmt750T(');
sql.add('prdcod char(13),');
sql.add('up2 char(7),');
sql.add('el integer,');
sql.add('sl integer,');
sql.add('bo integer,');
sql.add('hn integer)');
execsql;
end;//with
with query1 do
begin
close;
sql.clear;
sql.add(' select * ');
sql.add(' from bmt750');
sql.add(' where stkyr+stkmm+stkdd>=20001129');
open;
first;
while not eof do
begin
with query2 do
begin
close;
sql.add('insert into bmt750t (prdcod,up2,el,sl,bo,hn)');
sql.add('values (:prdcod_,:a_,:el_,:sl_,:bo_,:hn_)');
parambyname('prdcod_').asstring:=query1.fieldbyname('prdcod').asstring;
parambyname('a_').asstring:='abc';
if query1.fieldbyname('stkid').asstring='el' then
parambyname('el_').asinteger:=query1.fieldbyname('trans').asinteger// + query1.fieldbyname('netinp').asinteger
else
if query1.fieldbyname('stkid').asstring='sl' then
parambyname('sl_').asinteger:=query1.fieldbyname('trans').asinteger// + query1.fieldbyname('netinp').asinteger
else
if query1.fieldbyname('stkid').asstring='bo' then
parambyname('bo_').asinteger:=query1.fieldbyname('trans').asinteger// + query1.fieldbyname('netinp').asinteger
else
if query1.fieldbyname('stkid').asstring='hn' then
parambyname('hn_').asinteger:=query1.fieldbyname('trans').asinteger;// + query1.fieldbyname('netinp').asinteger;
execsql;
close;
end;//with
next;
end;//while
end;//with
with query1 do
begin
i:=0;
close;
sql.clear;
sql.add('select prdcod,up2,el,sl,bo,hn');
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('up2').asstring;
stringgrid1.cells[2,i]:=fieldbyname('el').asstring;
stringgrid1.cells[3,i]:=fieldbyname('sl').asstring;
stringgrid1.cells[4,i]:=fieldbyname('bo').asstring;
stringgrid1.cells[5,i]:=fieldbyname('hn').asstring;
next;
inc(i);
end;//while
close; //query1
sql.clear;
sql.add('drop table bmt750t');
execsql;
close;
end; //with
end; //처음 begin
function tform1.havingtable(table_name:string):integer;
var
itemlist:tstringlist;
begin
itemlist:=tstringlist.create;
session.gettablenames('mydb','',false,false,itemlist);
result:=itemlist.indexof(table_name);
end;
end.
머가먼지.. 복잡하자나여... T_T
임시테이블이 존재한다는 메세지가 나온다면... 혹시... 임시테이블 삭제할때... 임시테이블을 열고 있지나 않은지 한번 보시구여...
field_el is of unknown type 라면... 필드타입이 정해지지 않았다는 것처럼 보이는데... 이런 경험은 처음이라 좀 어렵군요...
그리고.. select 문을 날린 후에.. first를 넣어줬는데.. 쓸모없는 문장입니다...
select를 날린후엔 항상 커서가 첫번째로 이동해있습니다.
직접 시험해보지 않으면 에러를 잡기 힘들것 같아서... ^^;;
일단 직접 잡아보세요... 앞쪽에 점을 찍으면... 점이 체크가 됩니다.. 그럼 실행시키구여. 그 문장이 실행될때.. 점에서 멈추게 됩니다. 그럼 F7을 누르면 한줄씩 실행됩니다... 그렇게 하면.. 어디서 문제인지 약간을 찾기가 쉬울거에요... 제가 지금 바빠서..
퇴근해야징~~~ 헤헤... 그럼... 나중에..
해결이 안되면.. DB랑 source 올리세요... 직접해볼께요.
델이랑파이랑 wrote:
> 임시테이블생성후 프로그램 다시돌릴때
> 1.이미 bmt750t(임시테이블)이 존재한다는 메시지와
> 2.Field_el is of unknowm type라는 메시지가 발생합니다...뭐가 잘못된건지 통 감이 잡히질 않네요.....바쁘시더라도 꼭 좀 봐주세요..며칠째 고민중입니다..
> 첫번째에러는 함수값의 반환에서 문제가 있는건지...
> 두번째에러는 임시테이블의 필드정의와 파라미터로 값을 insert할때이 타입이 잘못된건지...쩝 ..감이 잡히지 않네요...
> 아래는 전체소스입니다.
>
>
> type
> TForm1 = class(TForm)
> Panel1: TPanel;
> Image1: TImage;
> Bevel1: TBevel;
> Label1: TLabel;
> ComboBox1: TComboBox;
> ComboBox2: TComboBox;
> ComboBox3: TComboBox;
> CheckBox1: TCheckBox;
> Label2: TLabel;
> ComboBox4: TComboBox;
> Label3: TLabel;
> ComboBox5: TComboBox;
> CheckBox2: TCheckBox;
> CheckBox3: TCheckBox;
> Label4: TLabel;
> ComboBox6: TComboBox;
> PageControl1: TPageControl;
> TabSheet1: TTabSheet;
> TabSheet2: TTabSheet;
> StringGrid1: TStringGrid;
> querybitbtn1: TBitBtn;
> BitBtn2: TBitBtn;
> BitBtn3: TBitBtn;
> BitBtn4: TBitBtn;
> DataSource1: TDataSource;
> Query1: TQuery;
> Database1: TDatabase;
> Query2: TQuery;
> procedure BitBtn4Click(Sender: TObject);
> procedure querybitbtn1Click(Sender: TObject);
> function havingtable(table_name:string):integer;
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.BitBtn4Click(Sender: TObject);
> begin
> application.terminate;
> end;
>
> procedure TForm1.querybitbtn1Click(Sender: TObject);
> var
> i:integer;
> begin
> with query1 do
> begin
> if havingtable('bmt750t')<> -1 then // 임시 테이블(bmt750t)이 있으면
> begin
> close;
> sql.clear;
> sql.add('drop table bmt750t');
> execsql;
> end;
>
> close;
> sql.clear;
> sql.add('create table bmt750T(');
> sql.add('prdcod char(13),');
> sql.add('up2 char(7),');
> sql.add('el integer,');
> sql.add('sl integer,');
> sql.add('bo integer,');
> sql.add('hn integer)');
> execsql;
> end;//with
>
> with query1 do
> begin
> close;
> sql.clear;
> sql.add(' select * ');
> sql.add(' from bmt750');
> sql.add(' where stkyr+stkmm+stkdd>=20001129');
> open;
> first;
>
> while not eof do
> begin
> with query2 do
> begin
> close;
> sql.add('insert into bmt750t (prdcod,up2,el,sl,bo,hn)');
> sql.add('values (:prdcod_,:a_,:el_,:sl_,:bo_,:hn_)');
>
> parambyname('prdcod_').asstring:=query1.fieldbyname('prdcod').asstring;
> parambyname('a_').asstring:='abc';
> if query1.fieldbyname('stkid').asstring='el' then
> parambyname('el_').asinteger:=query1.fieldbyname('trans').asinteger// + query1.fieldbyname('netinp').asinteger
> else
> if query1.fieldbyname('stkid').asstring='sl' then
> parambyname('sl_').asinteger:=query1.fieldbyname('trans').asinteger// + query1.fieldbyname('netinp').asinteger
> else
> if query1.fieldbyname('stkid').asstring='bo' then
> parambyname('bo_').asinteger:=query1.fieldbyname('trans').asinteger// + query1.fieldbyname('netinp').asinteger
> else
> if query1.fieldbyname('stkid').asstring='hn' then
> parambyname('hn_').asinteger:=query1.fieldbyname('trans').asinteger;// + query1.fieldbyname('netinp').asinteger;
>
>
> execsql;
> close;
> end;//with
> next;
> end;//while
> end;//with
>
> with query1 do
> begin
> i:=0;
> close;
> sql.clear;
> sql.add('select prdcod,up2,el,sl,bo,hn');
> 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('up2').asstring;
> stringgrid1.cells[2,i]:=fieldbyname('el').asstring;
> stringgrid1.cells[3,i]:=fieldbyname('sl').asstring;
> stringgrid1.cells[4,i]:=fieldbyname('bo').asstring;
> stringgrid1.cells[5,i]:=fieldbyname('hn').asstring;
> next;
> inc(i);
> end;//while
> close; //query1
>
> sql.clear;
> sql.add('drop table bmt750t');
> execsql;
> close;
> end; //with
>
> end; //처음 begin
>
> function tform1.havingtable(table_name:string):integer;
> var
> itemlist:tstringlist;
> begin
> itemlist:=tstringlist.create;
> session.gettablenames('mydb','',false,false,itemlist);
> result:=itemlist.indexof(table_name);
> end;
>
> end.