* 사용환경 : 인터베이스6
* 에러 메시지 : Dynamic sql error SQL error code = -104
Token unknown - line 2 , char -1
배움앞에는 염치가 없다는 마음으로 넓은 이해를 바랍니다.
with Ibquery1 do begin
Close;
SQL.Clear;
SQL.Add('select * from vcust ');
open;
append; ->insert대신 append명령을 써도 되는지요...(맨 끝줄에 자료추가시..)
//insert;
FieldByName('vno').Value := regno;
FieldByName('vname').Value := regname;
FieldByName('vtel').Value := regtel;
FieldByName('v_jumin').Value := regjumin;
FieldByName('v_nick').Value := regnick;
FieldByName('post_no').Value := regpost;
FieldByName('add1').Value := regadd1;
FieldByName('add2').Value := regadd2;
FieldByName('family').Value := regfamily;
FieldByName('v_kind').Value := regkind;
FieldByName('v_point').Value := regpoint;
FieldByName('v_charge').Value := regcharge;
FieldByName('Regist_date').Value := regdate;
FieldByName('Last_visit').Value := regvisit;
FieldByName('v_s_money').Value := regmoney;
FieldByName('membership').Value := regmember;
showmessage( '여기까지는 에러없음1' );
-------------------------------------여기까지는 잘 됩니다.
//Post; ->이줄이 활성화되고 한두번 에러를 내면 화면이 허옇게 변하며 컴 다운입니다.
또한 이줄이 활성화되면 다이나믹 에러, SQL Statement -104 어쩌구 하는 에러가 납니다.
if ibtransaction1.InTransaction then
begin
showmessage( '트랜잭션 진입!!' );
try
showmessage( 'Try모드 진입!!' ); -> Post 명령을 REM 시키면 이줄까지는 도착합니다.
applyupdates; -> 이명령에서 다이나믹 에러, SQL Statement -104 어쩌구 하는 에러가 납니다.
showmessage( 'commit전단계!!' );
ibtransaction1.commit;
showmessage( '기록성공!!' );->기록성공까지는 가지못하는군요...
---------------------------------------------------------------------------------
아래에 전체소스입니다.
무엇이 잘 못되었는지요...
procedure TForm1.Button8Click(Sender: TObject);
var
RegNo, RegName, RegTel, RegJumin, RegNick, RegPost:String;
RegAdd1, RegAdd2, RegKind, RegDate, Regvisit,RegMember : String;
Maxno, RegFamily, RegPoint, RegCharge, RegMoney: Integer;
begin
NoteBook1.PageIndex:=0;
with Ibquery1 do begin
Close;
SQL.Clear;
SQL.Add('select * from vcust ');
open;
Edit7.Text:=Regno;
RegName:=Edit5.Text;
RegTel:=Edit6.Text;
RegJumin:=Edit8.Text;
RegNick:=Edit9.Text;
RegPost:=Edit10.Text;
RegAdd1:=Edit11.Text;
RegAdd2:=Edit12.Text;
RegFamily:=0;
RegKind:='1';
RegMember:=Edit14.Text;
RegPoint:=0;
RegCharge:=0;
RegMoney:=0;
Regdate:=FormatDateTime('yyyy-mm-dd',NOW);
Regvisit:=FormatDateTime('yyyy-mm-dd',NOW);
Last;
Regno:= Trim(Fieldbyname('vno').AsString);
showmessage( Regno );
Maxno:= StrToInt(Regno)+1;
(*if maxno <= recordcount then
maxno:=recordcount+1 ; *)
Regno:= IntToStr(Maxno);
showmessage( inttostr(maxno) );
showmessage( Regno );
append;
//insert;
FieldByName('vno').Value := regno;
FieldByName('vname').Value := regname;
FieldByName('vtel').Value := regtel;
FieldByName('v_jumin').Value := regjumin;
FieldByName('v_nick').Value := regnick;
FieldByName('post_no').Value := regpost;
FieldByName('add1').Value := regadd1;
FieldByName('add2').Value := regadd2;
FieldByName('family').Value := regfamily;
FieldByName('v_kind').Value := regkind;
FieldByName('v_point').Value := regpoint;
FieldByName('v_charge').Value := regcharge;
FieldByName('Regist_date').Value := regdate;
FieldByName('Last_visit').Value := regvisit;
FieldByName('v_s_money').Value := regmoney;
FieldByName('membership').Value := regmember;
showmessage( '여기까지는 에러없음1' );
//Post;
if ibtransaction1.InTransaction then
begin
showmessage( '트랜잭션 진입!!' );
try
showmessage( 'Try모드 진입!!' );
applyupdates;
showmessage( 'commit전단계!!' );
ibtransaction1.commit;
showmessage( '기록성공!!' );
Open;
except
ibtransaction1.rollback;
end;
end
else
showmessage('트랜잭션 모드가 아님!');
end ;
알고리즘(?) 은 대강 이렇습니다.
TIBTransaction 체크
try
여기서 SQL 문장 처리
except
SQL문장 처리는 데이터에 수정을 가할때에는
ExecSQL method를 사용해야합니다.
즉
with IBQuery1 do begin
Close;
SQL.Clear;
SQL.Add(추가되는 문장);
ExecSQL;
end;
여기서 추가되는 문장 즉 SQL문에서 데이터를 추가할려면
INSERT 문장을 쓰게됩니다.
델파이에서 이런문장을 쓸려면
INSERT INTO EMPLOYEEN VALUES (:EMP_NO, :LAST_NAME)
Param값 Param값
이렇게 됩니다.
TQuery 쪽의 도움말을 보면
ParamByName is primarily used to set an parameter