2017-10-30 1 views
1

Advantage Database Server에서 Null 값을 반환해야하는 SQL 문을 실행하면 null 대신 -922337203685477.58 값이 반환됩니다. 내가 fireDac에서 TFDQuery를 사용하는 경우 내가 Advantage에서 기본 TAdsQuery를 사용하는 경우Null 값 TAdsQuery에서 잘못된 값을 반환하고 TFDQuery에서 제대로 작동합니다. in Delphi Tokyo

그러나,이 경우에만 발생하는 모든 괜찮

SQL: Select Cast(Null AS SQL_MONEY) Value From System.iota; 

같은 예는 XE7에서 제대로 작동하지만 도쿄, TDataSet의 설치가 완료 아니었다 https://www.jd-engineering.de/ads-and-delphi-10-2-tokyo/의 지시에 따라

+1

이것은 버그보고입니까? 아마도 당신은 관련 당사자에게 그것을 제출해야합니다. –

+0

설정 또는 일부 해결 방법이 누락되었을 수 있습니다. 각각의 경우에 곧 ADS에 대한 업데이트가 없으며 실제 지원이 제공되지 않으므로 TAdsQuery에 대한 해결 방법이나 수정이 필요합니다. – Yon

+0

ADS의 버전은 무엇입니까? 나 한테 버그 같아. –

답변

1

그것은, 요아킴은 버그를 발견하고 대한 수정 게시 것 : 나는 장점 델파이 클라이언트가 델파이 도쿄에서 MONEY 데이터 유형에 NULL을 반환하지 않는 것을보고

https://www.jd-engineering.de/advantage-returning-wrong-value-on-null-in-delphi-tokyo/

을 . 몇 가지 조사를 한 후 adschat.pas에 버그를 발견했습니다. 행 5996은 데이터 버퍼와 이 ADS에서 NULL을 나타내는 값과 비교합니다.

if (pSIGNED64 (pcData)^ <> $8000000000000000) then 

그 기능 (TAdsDataSet.IsFieldBlank) 의 다른 모든 비교가 대신 서명되지 않은 값을 비교 : 그것은 비교를위한 Signed64의 내용을 캐스팅합니다. 위 라인을 수정하면

if (PUNSIGNED64 (pcData)^ <> $8000000000000000) then 

이 문제를 해결합니다.

관련 문제