Q&A

  • 테이블에 있는 특정칼럼에 날자형식값을 넣을려고 하는데 안들어가네요
procedure TFFSWS1060I.SaveSaleInfo();
var
   P_datetime : TDateTime;
begin
  if not CDS1.Active then Exit;

  CDS1.Next;

  Screen.Cursor := crHourGlass;
  CDS1.DisableControls;

  try
    with CDS1 do
    begin

      if IsEmpty then Exit;

      First;
      while not Eof do
      begin
        if ( UpdateStatus in [usModified,usInserted] ) then
        begin
          Edit;
          FieldByName('등록사번').AsString     := arg[0];
-->          P_datetime := StrToDateTime(FormatDateTime('mmddyyyy hhmmss', now));
-->          FieldByName('등록일자').AsDateTime   :=  P_datetime;
          Post;
        end;

        Next;
      end;

      if ApplyUpdates(0) > 0 then Exit; //CDS1BeforeApplyUpdates
    end;
  finally
    CDS1.EnableControls;
    Screen.Cursor := crDefault;
  end;

  ComboBox101.SetFocus;
  Application.MessageBox(PChar(MsgI02), '확인', MB_ICONINFORMATION+MB_OK);
end;


데이타가 수정이 되면 "등록일자"칼럼에 현재시간을 넣을려고 합니다.
위와 같이 화살표처럼 했는데 다음과 같이 에러가 나오네요
" EConvertError with message ''10302007 160547' is not a valid date and time'
뭐가 잘못됐는지 모르겠어요.
고수님들 도와주세요
4  COMMENTS
  • Profile
    김현웅 2007.11.01 18:38
    이부분이 좀.. => StrToDateTime(FormatDateTime('mmddyyyy hhmmss', now))

    '11012007 093507' 이런 형식의 데이터가 Datetime형이라고
    생각하는것은 개발하고 계신분만 이해할 수 있지않을까 싶습니다.

    DB에는 그냥 now만 입력하시고 나중에 추출할 때 Formatdatetime으로
    입맛에 맞추시는게 어떨까요..

  • Profile
    김재윤 2007.11.02 04:14

    네 김현웅님 감사합니다.
    확인해보니까 됩니다.
    하지만 확인해본 곳은 질문했던 프로그램이 아니라,
    다른 프로그램에서 테스트 해보니까 테이블에 적용이 되더군요.



    한 레코드에서 한 칼럼이라도 수정이 되면, UpdateStatus가 usModified 가 되어
    "등록사번", "등록일자"가 변경이 되도록 하는 건데,

    이상하게도 아래 프로그램에서는 생각대로 안되요.

    table를 select 해서 보면,

    "등록사번"칼럼에는 수정한 사람의 사번값이 들어가는데

    "등록일자"칼럼에는 수정이 되면 현재시간이 들어가질 않습니다.(이넘만 수정이 안되요)

    그래서 이해가 안갑니다. 눈물 날 지경입니다.

    하수가 고수님께 도움을 요청합니다. 도와주세요.


    ===========================================
    procedure TFFSWS1060I.SaveSaleInfo();
    var
       P_datetime : TDateTime;
    begin
      if not CDS1.Active then Exit;

      CDS1.Next;

      Screen.Cursor := crHourGlass;
      CDS1.DisableControls;

      try
        with CDS1 do
        begin

          if IsEmpty then Exit;

          First;
          while not Eof do
          begin
            if ( UpdateStatus in [usModified,usInserted] ) then
            begin
              Edit;
    ---->      FieldByName('등록사번').AsString     := arg[0];
    ---->      FieldByName('등록일자').AsDateTime   := now;
              Post;
            end;

            Next;
          end;

          if ApplyUpdates(0) > 0 then Exit; //CDS1BeforeApplyUpdates
        end;
      finally
        CDS1.EnableControls;
        Screen.Cursor := crDefault;
      end;

      ComboBox101.SetFocus;
      Application.MessageBox(PChar(MsgI02), '확인', MB_ICONINFORMATION+MB_OK);
    end;
    ===========================================================
  • Profile
    최용일 2007.11.02 05:23
    디비의 "등록일자"라는 필드의 데이터형이 무엇인가 확인해보세요...
    날짜형이라면 별다른 이상없이 잘 들어가야 하는데 안들어간다고 하시는것을 보면 날자형이 아닌가봅니다.

    varchar같은 문자열형이면 날짜를 문자열로 바꾸세요...
    timestamp면 그에 맞게 날짜를 timestamp로 바꾸어서 저장하세요.

  • Profile
    김재윤 2007.11.02 19:55
    고민을 많이 했었는데

    잘 해결되었습니다.

    넘 감사합니다.