Q&A

  • SQL Select Error
with qryTemp do

begin

Close;

SQL.Clear;

SQL.Add( 'SELECT CONT_NO, NAME, RFC_NO, IMSS_NO, D311, D313, ' );

SQL.Add( 'CATE_CODE, OCCUP_CODE, HOURS, DAY_WAGE, INTE_WAGE ' );

SQL.Add( 'FROM HRCS_CONTRACT C, ( ' );

SQL.Add( 'SELECT CARD_TAG, SUM(OT) HOURS ' );

SQL.Add( 'FROM HRCS_WORK ' );

SQL.Add( 'WHERE WORK_DATE >= :START_DAY ' );

SQL.Add( 'AND WORK_DATE <= :END_DAY ' );

SQL.Add( 'GROUP BY CARD_TAG ' );

SQL.Add( ') W ' );

SQL.Add( 'WHERE C.CARD_TAG = W.CARD_TAG ' );

SQL.Add( 'AND HOURS > 0' );

ParambyName( 'START_DAY' ).AsDate := pdtStart_Day;

ParambyName( 'END_DAY' ).AsDate := pdtEnd_Day;

Open;

end;



이것을 실행하면



Project hrcs.exe raised exception class EDBEngineError

with message 'Invalid use of keyword. Token : SELECT

Line Number : 4'.



그런데 SQL*Plus 와 SQL Explorer에서

위와 같이 쿼리하면 잘 됩니다..



원인이 뭐죠?

3  COMMENTS
  • Profile
    최성진 1999.10.16 20:26
    김정선 wrote:

    > with qryTemp do

    > begin

    > Close;

    > SQL.Clear;

    > SQL.Add( 'SELECT CONT_NO, NAME, RFC_NO, IMSS_NO, D311, D313, ' );

    > SQL.Add( 'CATE_CODE, OCCUP_CODE, HOURS, DAY_WAGE, INTE_WAGE ' );

    > SQL.Add( 'FROM HRCS_CONTRACT C, ( ' );

    > SQL.Add( 'SELECT CARD_TAG, SUM(OT) HOURS ' );

    > SQL.Add( 'FROM HRCS_WORK ' );

    > SQL.Add( 'WHERE WORK_DATE >= :START_DAY ' );

    > SQL.Add( 'AND WORK_DATE <= :END_DAY ' );

    > SQL.Add( 'GROUP BY CARD_TAG ' );

    > SQL.Add( ') W ' );

    > SQL.Add( 'WHERE C.CARD_TAG = W.CARD_TAG ' );

    > SQL.Add( 'AND HOURS > 0' );

    > ParambyName( 'START_DAY' ).AsDate := pdtStart_Day;

    > ParambyName( 'END_DAY' ).AsDate := pdtEnd_Day;

    > Open;

    > end;

    >

    자세히 보시면 서브쿼리 위치가 잘못되었습니다.

    FROM 절에 나오는것이 아니라 where 절에서 나와야지요..

    그래서 서브쿼리할때 SELECT 가 잘못되었다고 합니다.

    그럼..

  • Profile
    이재식 1999.10.16 00:55
    김정선 wrote:

    > with qryTemp do

    > begin

    > Close;

    > SQL.Clear;

    > SQL.Add( 'SELECT CONT_NO, NAME, RFC_NO, IMSS_NO, D311, D313, ' );

    > SQL.Add( 'CATE_CODE, OCCUP_CODE, HOURS, DAY_WAGE, INTE_WAGE ' );

    > SQL.Add( 'FROM HRCS_CONTRACT C, ( ' );

    > SQL.Add( 'SELECT CARD_TAG, SUM(OT) HOURS ' );

    > SQL.Add( 'FROM HRCS_WORK ' );

    > SQL.Add( 'WHERE WORK_DATE >= :START_DAY ' );

    > SQL.Add( 'AND WORK_DATE <= :END_DAY ' );

    > SQL.Add( 'GROUP BY CARD_TAG ' );

    > SQL.Add( ') W ' );

    > SQL.Add( 'WHERE C.CARD_TAG = W.CARD_TAG ' );

    > SQL.Add( 'AND HOURS > 0' );

    > ParambyName( 'START_DAY' ).AsDate := pdtStart_Day;

    > ParambyName( 'END_DAY' ).AsDate := pdtEnd_Day;

    > Open;

    > end;

    >

    > 이것을 실행하면

    >

    > Project hrcs.exe raised exception class EDBEngineError

    > with message 'Invalid use of keyword. Token : SELECT

    > Line Number : 4'.

    >

    > 그런데 SQL*Plus 와 SQL Explorer에서

    > 위와 같이 쿼리하면 잘 됩니다..

    >

    > 원인이 뭐죠?



    이재식 Wrote :

    안녕하세요?

    SQL-Plus나 SQL Explorer에서는 위 코딩은 잘 됩니다.

    아무 문제가 없는 코딩입니다

    그런데요, 이 것을 델파이에서 실제로 코딩해서 실행시킬때,

    어떤 DB를 이용하셨습니까?

    혹시 서버 DB가 아니라 로컬 DB(가령, Paradox등)을 이용했다면

    위와 같은 에러 메시지가 나옵니다.

    즉, 로컬 DB에서는 위 코딩이 에러가 납니다.

    모양은 서브쿼리 비슷하지만, 실제로는 서브쿼리가 아니죠.



    로컬DB에서는 from뒤에 기술해준 위의 코딩은 해당사항이

    안됩니다.



    만약 델파이안에서 로컬 DB가 아니라 서버DB로 했는데도,

    저런 에러가 났다면(그럴일은 없지만!!)

    매우 이상한 현상이죠.









  • Profile
    이상준 1999.10.16 00:43
    김정선 wrote:

    > with qryTemp do

    > begin

    > Close;

    > SQL.Clear;

    > SQL.Add( 'SELECT CONT_NO, NAME, RFC_NO, IMSS_NO, D311, D313, ' );

    > SQL.Add( 'CATE_CODE, OCCUP_CODE, HOURS, DAY_WAGE, INTE_WAGE ' );

    > SQL.Add( 'FROM HRCS_CONTRACT C, ( ' );

    > SQL.Add( 'SELECT CARD_TAG, SUM(OT) HOURS ' );

    > SQL.Add( 'FROM HRCS_WORK ' );

    > SQL.Add( 'WHERE WORK_DATE >= :START_DAY ' );

    > SQL.Add( 'AND WORK_DATE <= :END_DAY ' );

    > SQL.Add( 'GROUP BY CARD_TAG ' );

    > SQL.Add( ') W ' );

    > SQL.Add( 'WHERE C.CARD_TAG = W.CARD_TAG ' );

    > SQL.Add( 'AND HOURS > 0' );

    > ParambyName( 'START_DAY' ).AsDate := pdtStart_Day;

    > ParambyName( 'END_DAY' ).AsDate := pdtEnd_Day;

    > Open;

    > end;

    >

    > 이것을 실행하면

    >

    > Project hrcs.exe raised exception class EDBEngineError

    > with message 'Invalid use of keyword. Token : SELECT

    > Line Number : 4'.

    >

    > 그런데 SQL*Plus 와 SQL Explorer에서

    > 위와 같이 쿼리하면 잘 됩니다..

    >

    > 원인이 뭐죠?



    글쎄요.. 제생각에는 쿼리 콤포넌트의 프로퍼티중에서

    데이타베이스항목이 설정되어 있지 않는 경우 같은 데

    한번 확인 해보시기 바랍니다.