액세스에서 쓰는 SQL문은 기본적으로 SQL서버와 같을텐데...
보여주신 업데이트문 정도는 너무나 단순해서 오라클과의 문법의 차이로 인해서 구문 에러가 나는 건 아닐 겁니다.
보통 이렇게 단순한 쿼리에서 에러가 나면 먼저 의심해봐야 할 것이 키워드를 사용한 것이 아닌가 하는 건데...
저도 여러 디비에서 쓰는 SQL 키워드를 다 아는 게 아니라서 자신은 없습니다만.. 눈에 띄는 것이, floor네요.
floor는 SQL서버의 수학 함수 리스트에 있는 걸로 알고 있습니다.
해당 floor 필드가 not null이 아니라면 테이블을 고치고 어쩌구 하실 필요 없이 그냥 floor=:p3 부분과 아래의 파라미터값
할당 라인을 주석처리하고 다시 해보세요. 그래도 에러가 난다면 마찬가지로 의심스러운 필드명을 하나씩 제외하면서
해보시기 바랍니다.
그럼...
jinkebi 님이 쓰신 글 :
: 아래 프로시져는 오라클에서는 정상적으로 동작합니다.
: 근대 ado를 써서 access db로 실행하면 update 구문오류라고 나오네요..
: 고수님들 원인좀 찾아주세요.
:
:
: procedure TfmMainAdm.btnUpdateOkClick(Sender: TObject);
: var ss: string;
: begin
: with dm.qrlUpdate do begin
: close;
: sql.clear;
: sql.add('update main set kukname = :p1, deptname = :p2 ');
: sql.Add(' ,floor = :p3, eqid = :p4, eqmodel = :p5 ');
: sql.add(' ,eqGubun = :p6, adminNo = :p7, adminsn = :p8 ');
: sql.add(' ,muser = :p9, return = :p10, inDate = :p11 ');
: sql.add(' ,memo = :p12, etc1 = :p13, etc2 = :p14, etc3 = :p15 ');
: sql.add('where id= :p16 ');
: parameters.parambyname('p1').value:= cbKukname.Text;
: parameters.parambyname('p2').value:= cbDeptname.text;
: parameters.parambyname('p3').value:= cbFloor.text;
: parameters.parambyname('p4').value:= Uppercase(eEqid.text);
: parameters.parambyname('p5').value:= Uppercase(eEqmodel.text);
: parameters.parambyname('p6').value:= cbEqgubun.text;
: parameters.parambyname('p7').value:= Uppercase(eAdminNo.text);
: parameters.parambyname('p8').value:= Uppercase(eEqSn.text);
: parameters.parambyname('p9').value:= Uppercase(eUser.text);
:
: ...
: parameters.parambyname('p16').value:= strtoint(eid.Text);
:
: try
: ExecSQL;
: except on E:EDatabaseError do begin
: showmessage('수정 작업중 에러발생' +#13#10+ E.Message);
: end;
: end;
: (이하생략)
|