파라미터를 가진 SQL문이 너무 복잡한 경우, 간혹 델파이의 런타임이 SQL 문 파싱에 실패하는 경우가 있었던 것 같습니다. 그럴 때 어떻게 해서 피해간 기억이 있는데, 어떻게 피했는지 기억이 가물가물하네요.
파라미터 지정 부분을 포함해서 해당 SQL문을 디자인타임에 TSQLQuery의 SQL.Text 속성에 넣고 그대로 Active 속성을 true로 해보시기 바랍니다. 어떤 증상이 발생하는지요.
그리고 추가로 다음의 두가지를 알려주세요.
1. 델파이 버전이 몇버전인지?
2. 연결하는 데이터베이스 서버는 어떤 제품인지?
노재환 님이 쓰신 글 :
: 예전 게시글에도 같은 내용이 있었던 내용입니다.
: 거기에 대한 답글이 없어 이렇게 문의 드립니다.
:
: BDE 를 DBExpress 로 변환 과정중에 TQuery 에서는 문제가 없던게 TSQLQuery로
: 변환하여 돌리면 에러가 발생합니다.
:
: error 가 발생
: sql state 42000
: error code = 0
: 이런 에러가 발생함니다
:
: 1 Sql.Clear;
: 2 Sql.Add('select icode, rtrim(ite_name + '' '' + ite_size) iname,');
: 3 Sql.Add(' substring(cyymmdd,7,2) as cday, sum(cqty) as cqty, sum(camt)/1000 as camt');
: 4 Sql.Add(' from (');
: 5 Sql.Add(' select sal_ite_code as icode, sal_mem_code as ccode, sal_yymmdd as cyymmdd,');
: 6 Sql.Add(' sum(sal_qty) as cqty, sum(sal_amt) as camt');
: 7 Sql.Add(' from sale');
: 8 Sql.Add(' where sal_flag = ''1''');
: 9 Sql.Add(' and sal_ite_code between :MFr and :MTo');
: 10 Sql.Add(' and sal_yymmdd between :DFr and :DTo');
: 11 Sql.Add(' group by sal_ite_code, sal_mem_code, sal_yymmdd');
: 12 Sql.Add(' having sum(sal_box) <> 0');
: 13 Sql.Add(' ) tmp');
: 14 Sql.Add(' left outer join item on ite_code = icode');
: 15 Sql.Add(' group by icode, ite_name, ite_size, cyymmdd');
: 16 Sql.Add(' order by icode, cyymmdd');
: ParamByName('DFr').AsString := EdDFr.Text;
: ParamByName('DTo').AsString := EdDTo.Text;
: ParamByName('MFr').AsString := EdMFr.Text;
: ParamByName('MTo').AsString := EdMTo.Text;
: Open;
:
: 그런데 ParamByName 절을 빼면 이상 없이 수행이 되는데 ,
: ParamByName는 어찌 해결해야 하나요??
:
: 참고로 5~12 라인만 뽑아 수행하면 ParamByName 절을 넣어도 잘 됩니다.
:
: 도통 원인을 모르겠네요.. 고수님들의 답변 부닥트립니다.
|