Q&A

  • Between사용시 Error
Between을 사용하여 한달동안의 합계금액을 구하려고 합니다.

SQL부분은 아래와 같습니다.



Close;

SQL.Clear;

SQL.Add('SELECT SUM(Account) as PartTotal');

SQL.Add('FROM Money');

SQL.Add('WHERE Kind = :v1 AND');

방법1: SQL.Add('Day BETWEEN ''00-09-01'' AND ''00-09-30''');

방법2: SQL.Add('Day BETWEEN :v2 AND :v3');

SQL.Add('Group BY Account');

ParamByName('v1').AsString := stringgrid1.Cells[i,0];

방법2: DecodeDate(Date, ny, nm, nd);

ParamByName('v2').AsDateTime := EncodeDate(ny, mm, 1);

ParamByName('v3').AsDateTime := EncodeDate(ny, mm, 31);

Open;



날짜를 직접 입력한 방법1에서는 Invaild modify request라고 00-09-30부분에서 Error가나고,

방법2에서는 EConvertError로 Invaild argument to date encode라고 Error가 발생합니다.

어떻게 해야할지...

1  COMMENTS
  • Profile
    성더기 2000.09.26 03:09
    투덜이 wrote:

    > Between을 사용하여 한달동안의 합계금액을 구하려고 합니다.

    > SQL부분은 아래와 같습니다.

    >

    > Close;

    > SQL.Clear;

    > SQL.Add('SELECT SUM(Account) as PartTotal');

    > SQL.Add('FROM Money');

    > SQL.Add('WHERE Kind = :v1 AND');

    > 방법1: SQL.Add('Day BETWEEN ''00-09-01'' AND ''00-09-30''');

    > 방법2: SQL.Add('Day BETWEEN :v2 AND :v3');

    > SQL.Add('Group BY Account');

    > ParamByName('v1').AsString := stringgrid1.Cells[i,0];

    > 방법2: DecodeDate(Date, ny, nm, nd);

    > ParamByName('v2').AsDateTime := EncodeDate(ny, mm, 1);

    > ParamByName('v3').AsDateTime := EncodeDate(ny, mm, 31);

    > Open;

    >

    > 날짜를 직접 입력한 방법1에서는 Invaild modify request라고 00-09-30부분에서 Error가나고,

    > 방법2에서는 EConvertError로 Invaild argument to date encode라고 Error가 발생합니다.

    > 어떻게 해야할지...



    EConvertError는 서로 다른 데이터 타입을 비교 또는 대입할때 발생하는 에러입니다



    먼저 Day의 필드 타입이 먼지 확인해 보세요..

    제생각에는 타입을 date로 해두신거 같은데...

    그러면



    방법1: SQL.Add('Day BETWEEN '''+StrToDateTime('00-09-01')+''' AND '''+StrToDateTime('00-09-30')+'''');

    이렇게 바꾸시길...^^

    답이 되시길 빌겠습니다..