2013-10-31 3 views
3

내 응용 프로그램에서 한 데이터베이스에서 읽고 두 번째 쓰기. 앱이 빠르고 빠르기 때문에 AsString을 사용하여 FieldByNameParamByName의 쿼리를 읽고 쓰고 있습니다. 이 데이터 유형은 지금까지 내가 FieldByName.AsString 말할 수 Date 또는 DateTime시스템 재정의 날짜 형식

곳에서 떨어져 내 모든 사용 사례 작동

는 (내 경우) 일/mm로 날짜를 반환하는 시스템을 ShortDateTime 형식을 사용합니다/yyyy. 데이터베이스는 날짜가 YYYY-MM-DD 내가 필요로 ShortDateFormat을 설정 할 수 있어야한다 Delphi Basics에 따르면

로 기록 될 것으로 예상하지만, XE5이 사건이 더 이상 (올바른지 나타납니다 ?)

TFormatSettings을 사용하여 로컬 설정을 재정의하는 thesetwo 질문을 여기에서 자세히 조사하십시오. 그러나이 두 가지 결과는 StrToDateFormatDateTime의 결과 FormatSettings를 직접 사용합니다.

그래서 두 가지 질문

1) 나는 시스템 ShortDateFormat를 오버라이드 (override) 내 응용 프로그램을 말할 수 있습니까?

2) 그렇다면 어떻게 (계획 B가없는 경우)?

+0

데이터베이스에 날짜 시간 유형 열을 사용하고 값을 채우기 위해'AsDateTime' casting을 사용해야합니다. 문자열로 날짜 시간을 저장하는 것이 잘못되었습니다. – TLama

+0

DB의 필드가 'DateTime'으로 설정됩니다.MySQL은 항상'AsDateTime'을 사용하여 컬럼에 쓰는 것에 대해 (적어도 DBX 아래에서) 질식하는 것으로 보이므로 일반적으로'FormatDateTime'을 사용하여'AsString'을 작성합니다. *이 경우 문자열로 유지하는 것이 좋습니다. –

+1

'AsDateTime'을 사용할 수없는 이유를 알아야한다고 생각합니다. –

답변

6

날짜 및 시간 형식에 전역 변수를 사용하는 것은 오리지널 RTL 디자이너가 오랫동안 저지른 실수였습니다. 단일 매개 변수 StrToDate처럼 전역 형식 설정에 의존하는 함수는 이전 버전과의 호환성을 위해 유지되지만 사용해서는 안됩니다.

날짜/시간 및 당신이해야 문자열 사이의 변환에 대한

:

  1. 이 날짜 형식의 TFormatSettings 인스턴스를 초기화한다.
  2. 두 개의 매개 변수 StrToDate을 호출하여 TFormatSettings을 전달하여 문자열에서 날짜로 변환하십시오.
  3. 다른 방향으로 변환 할 때 TFormatSettings을 허용하는 FormatDateTime 오버로드를 호출합니다.

이제 귀하의 질문에 답하십시오. 설명하는 시나리오에서 날짜와 시간에 문자열을 사용하지 않아야합니다. AsString 대신 AsDateTime을 사용하십시오. 날짜/시간을 문자열로 저장하는 데이터베이스 열이있는 경우 해당 디자인 오류를 해결하려면 TFormatSettings 기반 변환 함수를 사용해야합니다.

문자열로이 작업을 완전히 끝내지 못했지만 설득 할 수 없다면 FormatSettings.ShortDateFormat부터 SysUtils까지 짧은 날짜 형식을 제어해야합니다.

+0

데이비드에게 감사드립니다. 매우 명확한. 위에서 언급 한 바와 같이 DB는 적절한 경우'DateTime'으로 설정되었으므로 MySQL/DBX가 쓰기에 'AsDateTime'을 허용하도록 설득하지 못했습니다. 필자가 작업하고있는 예제는 기둥이 다소 동적이어서 기둥 형식 인식을 추가하는 것이 어려울 수 있지만 가능합니다. 그러나 TFormatSettings에 대한 추가 정보는 유용 할 것입니다. –