2011-03-11 2 views
1

최근 일부 델파이/인터베이스 응용 프로그램을 표시dbExpress는 타임 스탬프 필드의 밀리 초 부분을 읽지 않습니다

"레코드를 찾을 수 없거나 다른 사용자에 의해 변경되지"

그들은 기본 TSQLQuery/TClientDataSet의 (또는 TSimpleDataSet를 사용) dbExpress의 구성 요소.

데이터베이스 테이블에서 필드가 밀리 초 단위로 비 dbExpress 응용 프로그램에 저장되어있는 것으로 나타났습니다.

dbExpress는 DB에서 밀리 초를 읽지 않아서 업데이트 테이블 SQL 문의 'where'조건에서 잘린 값을 사용하므로 업데이트 할 일치하는 레코드가 없었습니다.

업데이트 : 우리는 Delphi 응용 프로그램에서 TSQLTimeStamp 필드를 사용하고 있습니다. OnBeforePost 핸들러가 필드 값을 수정하지 않습니다.

업데이트 2

바와 같이 IBExternals.pas PCTimeStructure에서 볼 수 는 밀리 초 부분이 없습니다. 따라서 Delphi (2009)의 InterBase는 밀리 초 단위로 지원되지 않습니다.

누구든지 ms 지원이 이후 버전의 Delphi에 추가되었는지 알고 있습니까?

+0

참고 : https://forums.embarcadero.com/thread.jspa?threadID=109177&tstart=0 – mjn

답변

3

밀리 초를 지원하지 않는 InterBase/Firebird 클라이언트 API 인 isc_decode_timestamp입니다. Here과 관련된 Firebird 추적기 문제입니다.

업데이트 :이 부분은 answer입니다.

+0

페이지가 일본어로되어 있습니다 :) – mjn

+0

IBExpert는 데이터의 밀리 초 부분을 올바르게 표시하므로 InterBase 클라이언트 라이브러리에서 수정되었습니다. – mjn

+0

@mjn 감사합니다. 고정 ;-) –

0

dbexpress를 잘 모르는 것이지만 트리밍을 수행하는 데이터베이스 일 수 있습니다. 예를 들어 SQL Server가 전달 된 밀리 초를 삭제한다는 것을 알고 있습니다. DATETIME (정확한 이름은 확실하지 않음) 대신 TIMESTAMP 열을 사용할 수 있습니다. 아마도 TIMESTAMP 열은 사용중인 데이터베이스에서 밀리 초의 해상도를가집니다.

+0

데이터베이스 값이 정확합니다 (밀리 초). 밀리 초를 0으로 설정하기 위해 모든 레코드를 업데이트했습니다. 이제 응용 프로그램이 작동합니다. 패치가있을 때까지 밀리 초 단위로 타임 스탬프 값을 (올바르게) 쓴 다른 앱을 수정해야합니다. – mjn

+0

정보를 제공해 주셔서 감사합니다. –

-1
var 
    tmpDTS: string; 
    tmpDT: TDateTiume; 

DateTimeToString(tmpDTS,'yyyy"."mm"."dd" "hh"."nn"."ss" "zzz',tmpDT); 

이 형식으로 (TSQLQuery를 통해) Firebird 테이블에 레코드를 삽입하고 Flamerobin은 정확한 값을 표시합니다.

대신 TDateTime 매개 변수를 사용하여 값을 삽입하면 밀리 초가 잘립니다. DBGrid는 잘린 값을 보여줍니다.

Delphi XE, Db Express, Firebird, Firebird 2.5.1.

+1

예 DSQL을 실행하면 잘라내기를 직접 건너 뛰는 것을 이해합니다. 이것은 해결 방법입니다. – mjn