2016-08-08 4 views
-1

나는 어떤 일이 일어나고 있는지 믿을 수 없어이 문제를 증명하기가 쉽습니다. DAO를 사용하여 ACCESS DB에 아래 코드를 실행하면됩니다.데이터 유형이 SINGLE 인 필드 업데이트/삽입시

CREATE TABLE Table1(Field1 Single) 

INSERT INTO Table1 (Field1) VALUES(9.99) 

그런 다음

SELECT * FROM [Table1] 

결과가

필드 1 = 9,98999977111816 큰 문제입니다

인 2000 행 같은 것을 삽입 한 다음이 필드를 요약하면 때문에, 그 값은 예상되는 값 합계로부터 멀리 떨어지기 시작합니다.

추가 자세한 내용은

통화 싱글의 FieldSize = 7이 가게에, 나는 저장소 제한은 나에게 매우 중요하기 때문에 단일 사용할 필요가 있고,의 FieldSize = 15 저장해야합니다.

해결 방법은 매우 좋습니다. 시간을 잃어 버리는 것을 추측합니다. 참 투표권이 부과되지 않습니다.

이 문제는 무엇입니까? 누구에게도 동일한 문제가 있습니까? 문서화 된 문제입니까? 저와 함께있는이 행동에 대해 이야기하겠습니다.

+0

* "누구도 같은 문제가 있습니까?"* 예. 이것은 부동 소수점 (Single, Double) 데이터 유형이 Access뿐 아니라 * 모든 컨텍스트에서 작동하는 방식입니다. * "문제가 문서화되어 있습니까?"* 예 : [부동 소수점 연산이 깨졌습니까?] (0120-388-331) –

+0

그게 내가 말하는거야! 정말 고맙습니다! 죄송 합니다만,이 설명에 당신을 포기할 수는 없습니다. 이것은 새로운 계정입니다! 하지만 나는 당신의 이름 인 Gord Thompson을 비명 지을 수 있습니다. –

답변

3

통화

아니, 그렇지 않은 저장하는 15 바이트를 사용합니다. 저장에 8 바이트를 사용하며 소수점 왼쪽에 15 자리까지 정확합니다 (참조 : here).

단일

이 아니, 4 바이트를 사용 7 바이트를 사용합니다. 그러나, 부동 소수점 표현이고, 여기에 기술 된 바와 같이, 따라서 임의 부동 소수점 데이터 유형의 제한 사항이

Is floating point math broken?

Currency를 사용하기 위해 필요한 여분의 저장 용량은 실제 문제라면 그런 다음 애플리케이션의 전반적인 디자인을 다시 한 번 살펴보아야합니다. 예를 들어 Access 테이블 (데이터베이스 파일)에 대한 2GB 제한이 염려되는 경우 Access 데이터베이스 엔진은 더 이상 해당 작업에 적합한 도구가 아닙니다.

부록 : 2000  에 액세스 할 수 1기가바이트 이전하고, 영업 이익은 참 ~ 이십년 후 액세스   97을 사용하고, 어쩌면 그것은으로 업그레이드하는 시간 한계 이었다는 것을 우리에게 상기시켜 @HansUp하는

감사합니다 최신 버전의 Access

+0

괜찮습니다. FieldSize = 7 (단일) 및 FieldSize = 15 (통화). 솔루 션이 있으십니까? 24 년 동안이 응용 프로그램을 변경할 수 없기 때문에이 필드를 싱글 스페이스로 변경하면됩니다. –

+0

잘못된 답을 생성하는 공간을 절약하기위한 "해결책"은 "해결책"이 아닙니다. 당신이 피하려고하는 2GB 크기 제한입니까? –

+0

예, 그게 전부입니다! 그러나 한계는 1GB 눈금입니다 ...이 문제에 대한 downvote ... –

3

부동 소수점 오류가 표시되거나 다소 제한적입니다.

데이터에 대해 계산을 수행하고 소수점 이하 네 자리가 필요하지 않은 경우 항상 통화 데이터 형식을 사용해야합니다.

+0

통화는 15 바이트를 사용하고, 단일은 7 바이트를 사용합니다. 저장 용량 제한이 매우 중요하기 때문에 Single을 사용해야합니다. 어쨌든 고맙습니다.하지만 싱글을 사용해야합니다. –

+2

둘 다 가질 수 없습니다. 그건 의도적으로입니다. 액세스 제한이 아닙니다. 그것이 발생할 수있는 모든 데이터베이스 엔진의 조건입니다. 값을 정수로 확장 할 수는 있지만 모든 읽기 및 쓰기에 대한 계산이 필요합니다. 안좋다. – Gustav

+1

@PauloParedes re : "싱글을 사용해야합니다."- 그렇지 않습니다. 당신은 당신의 문제에 대한 적절한 해결책을 찾아야하고, '싱글'을 사용하는 것은 아닙니다. –