Q&A

  • maskedit의 속성
안녕하세요?



제가 작성하는 프로그램의 일부분입니다.

컴파일까지는 하는데 날짜(medtinday)에 입력을 하려고 하면 에러가 발생합니다.



프로그램의 내용은 입력날짜를 입력하면 db에서 같은 날의 gwano 최고값에 1을 더한 값이 cnt로 출력되게 하려는 겁니다.



query1의 sql 내용은

[ select max(gwano) from ab.db where inday = :dd ] 입니다.



에러내용입니다.

[EConvertError with message '' - - 'is not a valid date]





procedure TNgumsa.medtindayChange(Sender: TObject);

var

dd : Tdatetime;

cnt : integer;

begin

try

with query1 do begin

close;

prepare;

Params[0].asdate := strtodate(medtinday.text); << 이부분이 에러입니다.

cnt := Query1MaxofGwano.AsInteger;

open;

end;

finally



edtgwano.text := inttostr(cnt +1);

end;



2  COMMENTS
  • Profile
    정재홍 1999.07.03 03:39
    강미라 께서 말씀하시기를...

    > 안녕하세요?

    >

    > 제가 작성하는 프로그램의 일부분입니다.

    > 컴파일까지는 하는데 날짜(medtinday)에 입력을 하려고 하면 에러가 발생합니다.

    >

    > 프로그램의 내용은 입력날짜를 입력하면 db에서 같은 날의 gwano 최고값에 1을 더한 값이 cnt로 출력되게 하려는 겁니다.

    >

    > query1의 sql 내용은

    > [ select max(gwano) from ab.db where inday = :dd ] 입니다.

    >

    > 에러내용입니다.

    > [EConvertError with message '' - - 'is not a valid date]

    >

    >

    > procedure TNgumsa.medtindayChange(Sender: TObject);

    > var

    > dd : Tdatetime;

    > cnt : integer;

    > begin

    > try

    > with query1 do begin

    > close;

    > prepare;

    > Params[0].asdate := strtodate(medtinday.text); << 이부분이 에러입니다.

    > cnt := Query1MaxofGwano.AsInteger;

    > open;

    > end;

    > finally

    >

    > edtgwano.text := inttostr(cnt +1);

    > end;

    >



    제 생각은 이렇습니다.



    체인지이벤트에 코드를 넣어 두어서 그렇습니다.



    체인지 이벤트는 그 컨트롤이 생성되면서도 발생할 수 있습니다.



    즉, 아무 자료도 입력되지 않은 상태에서(' - - ')자료 변환을



    시도하기 때문입니다.



    그리고 날짜(1999-07-02)를 입력하기 위해 키보드의 1자를 누르는 순간에도



    1이 입력되기전에 체인지 이벤트가 먼저 발생하기 때문이죠...



    이렇게 해 보심이....



    체인지 이벤트가 아닌 키 다운 이벤트에....



    procedure TNgumsa.medtindayKeyDown(...생략...);

    var

    dd : Tdatetime;

    cnt : integer;

    begin

    if key = 13 then //또는 if key = vk_return then

    begin

    try

    with query1 do

    begin

    close;

    prepare;

    Params[0].asdate := strtodate(medtinday.text);

    open; //여기서 오픈을 먼저 해야 겠지요 아래서 쓰고있으니.

    cnt := Query1MaxofGwano.AsInteger;

    //open; 원래 여기에 있는데 ....

    end; //with문

    finally

    edtgwano.text := inttostr(cnt +1);

    end; //try문

    end; //if문

    end;



    그럼 문제 잘 해결 되길 바랍니다.

  • Profile
    하남수 1999.07.03 02:22
    안녕하세요 ^^

    제생각에는 그 에러메시지는

    다음 함수 즉, strtodate에서 스트링값을

    날짜로 변환하면서 생긴것 같습니다.(다 아는 얘기인가....)

    혹시 medtinday.text에 - -가 있지 않습니까?

    - -을 날짜로 변활 할때 에러가 발생하는 것같은데

    [EConvertError with message '' - - 'is not a valid date]

    이걸로 봐서는......





    강미라 께서 말씀하시기를...

    > 안녕하세요?

    >

    > 제가 작성하는 프로그램의 일부분입니다.

    > 컴파일까지는 하는데 날짜(medtinday)에 입력을 하려고 하면 에러가 발생합니다.

    >

    > 프로그램의 내용은 입력날짜를 입력하면 db에서 같은 날의 gwano 최고값에 1을 더한 값이 cnt로 출력되게 하려는 겁니다.

    >

    > query1의 sql 내용은

    > [ select max(gwano) from ab.db where inday = :dd ] 입니다.

    >

    > 에러내용입니다.

    > [EConvertError with message '' - - 'is not a valid date]

    >

    >

    > procedure TNgumsa.medtindayChange(Sender: TObject);

    > var

    > dd : Tdatetime;

    > cnt : integer;

    > begin

    > try

    > with query1 do begin

    > close;

    > prepare;

    > Params[0].asdate := strtodate(medtinday.text); << 이부분이 에러입니다.

    > cnt := Query1MaxofGwano.AsInteger;

    > open;

    > end;

    > finally

    >

    > edtgwano.text := inttostr(cnt +1);

    > end;

    >