안녕하세요?
제가 작성하는 프로그램의 일부분입니다.
컴파일까지는 하는데 날짜(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;
> 안녕하세요?
>
> 제가 작성하는 프로그램의 일부분입니다.
> 컴파일까지는 하는데 날짜(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;
그럼 문제 잘 해결 되길 바랍니다.