Delphi 2007을 가진 Firebird의 Timestamp 필드에서 밀리 초 값을 얻는 방법
-
07-07-2019 - |
문제
파이어 버드 데이터베이스 (서버 버전 2.1.3에서 실행)가 있고 dbexpress 객체 (인터베이스 드라이버 사용)를 사용하여 Delphi 2007과 연결하고 있습니다.
데이터베이스의 내 테이블 중 하나가 다음과 같은 것 같습니다.
CREATE TABLE MYTABLE
(
MYDATE Timestamp NOT NULL,
MYINDEX Integer NOT NULL,
...
Snip
...
PRIMARY KEY (MYDATE ,MYINDEX)
);
나는 테이블에 추가 할 수 있고 Flame Robin에서는 타임 스탬프 필드가 밀리 초 값을 갖는 것으로 표시됩니다.
그러나 내가 선택할 때 모든 것을 할 때 (select * from MYTABLE
) 테이블에서 나는 항상 000으로 반환되므로 밀리 초 값을 얻을 수 없습니다.
이것은 기본 키의 일부이므로 주요 문제를 일으 킵니다 (불행히도 테이블을 설계하지 않았으며 변경할 권한이 없습니다).
밀리 초 값을 얻기 위해 다음을 시도했습니다.
sql1.fieldbyname('MYDATE').AsDateTime;
sql1.fieldbyname('MYDATE').AsSQLTimeStamp;
sql1.fieldbyname('MYDATE').AsStirng;
sql1.fieldbyname('MYDATE').AsFloat;
그러나 그들은 모두 2009 년 9 월 14 일 14 : 25 : 06.000을 형식화 할 때 돌아옵니다.
타임 스탬프에서 밀리 초를 어떻게 검색합니까?
업데이트:이것이 미래의 모든 사람에게 도움이되는 경우, 여기 DBEXPRESS를 위해 시도한 운전자와 결과가 있습니다.
- Embarcadero -Firebird의 DBEXPRESS 드라이버 (Delphi 2010 시험판) -Milliseconds는 타임 스탬프에서 지원되지 않습니다.
- Chau Chee Yang의 -Dbexpress 드라이버 (Delphi 2007) - 타임 스탬프에서 지원되지 않는 밀리 초.
- Upscene -Firebird의 interxpress (Delphi 2007) - 밀리 초는 타임 스탬프에서 지원됩니다.
- Devart -Interbase 용 DBEXPRESS 드라이버 (Delphi 2007) - 밀리 초는 타임 스탬프에서 지원됩니다.
해결책
Firebird가 실제로 밀리 초를 지원하는지는 모르겠지만 Delphi 2007의 인터베이스 드라이버는 그렇지 않다는 사실을 알고 있습니다. 인터베이스가 C API에서 밀리 초를 반환하지 않기 때문입니다. 인터베이스는 DateTimes를 밀리 초 정밀도로 저장하지만, 인터베이스 API는 밀리 초 필드를 포함하지 않는 C TM 구조물에서 시간을 반환합니다. 따라서 인터베이스를 위해 설계된 DBEXPRESS 드라이버는이를 지원하지 않을 것입니다. 따라서 Firebird가 실제로 이것을 지원한다고 가정하면 운전자를 최소한으로 변경해야합니다.
다른 팁
내 동료 (에드윈 반 데르 크라 안) 방금 확인 : 함께 작동합니다 fibplus!
그는 Fibplus 버전 6.9.6과 Firebird 2.1.1을 확인했습니다.
그는 current_timestamp 삽입물을 삽입하고 추출했습니다. FormatDateTime('dd-mm-yyyy hh:nn:ss:zzz', TestpFIBDataSetMYDATE.Value)
그런 다음 그는 밀리 초를 포함하여 날짜와 시간을 되찾았습니다.
-jeroen
파이어 버드 FAQ #305 간단한 Varchar 캐스트를 통해이 문제를 쉽게 작업하는 방법을 설명합니다.
Firebird DBX 드라이버가 존재합니다 (시도 할 수 있음) :