Q&A

  • IBsql문의 SQL error = code -104 Token unknown - line
* 사용환경 : 인터베이스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 ;



1  COMMENTS
  • Profile
    김훈 2001.10.28 15:49
    전반적으로 코드자체에 문제가 있는 거 같습니다.



    알고리즘(?) 은 대강 이렇습니다.



    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