클래식 ado- 정의되지 않은 함수 '라운드'를 통한 SQL?
문제
레거시 제품을 작업 중이며 ADO를 통해 SQL이 SQL Server에 연결된 액세스 데이터베이스에 SQL을 실행하고 있습니다. SQL을 실행할 때 '정의되지 않은 함수'라운드 '오류가 발생하지만 쿼리를 가져 와서 액세스로 직접 실행하면 잘 작동합니다.. 나는 모든 것이 정확하고 이것이 생산 코드이기 때문에 기계 별 문제라는 것을 알고 있습니다. 다른 기계에서 작동하며 많은 클라이언트를 위해 성공적으로 배포되었습니다.
어디에서 정직 해야하는지조차 모르겠습니다. Jet/Ado/MDAC의 올바른 (최신) 버전을 실행하고 있습니다.
모든 도움이 감사하겠습니다.
미리 감사드립니다.
편집 : 분명히 SQL에는 집계 함수 '라운드'가 포함되어 있습니다. JET와 SQL 구현의 차이점을 알고 있습니다. 이 문제는 코드가 아닌 내 컴퓨터의 구성 요소에 문제가 있기 때문입니다. SQL은 MS Access 2007을 통해 완료되지만 ADO를 통해서는 제대로 실행됩니다.
해결책
edit2 : 의견에서 올바른 솔루션 :
SHAHKALPESH : 액세스를 통해 미세하게 실행하면 액세스에 DLL을 사용할 수 있으며 라운드 기능이 있습니다. 연결 문자열이란 무엇입니까?
stimul8d : 연결 문자열로 어떻게 할 수 있는지 잘 모르겠습니다. 이 코드는 변경없이 다른 모든 컴퓨터에서 작동합니다. 내 것이 아닙니다.
Andomar : 글쎄, 그게 당신의 문제입니다. 여전히 설치할 수 있습니다 VB6 SP6 아마도.
자극 8D : 글쎄, SP6은 그것을 고쳤다. Anndomar를 건배하고 SP6이 왜 고정되었는지 모르지만 그랬습니다!
편집 : 귀하의 의견에 따라 이 뉴스 그룹 게시물은 답일 수 있습니다.
불행히도, Access 외부에서 쿼리를 실행할 때 (VB에서 나온 것처럼) 데이터베이스에 대한 유일한 연결은 대부분의 VBA 기능에 대해 아무것도 모르는 제트 엔진을 통한 것입니다. 데이터를 VB 응용 프로그램으로 반환하고 데이터의 기능을 사용하는 것 외에는이 문제가 없습니다.
그리고 나중에 두 개의 게시물 :
나는 문제를 해결했다. 서비스 팩 6로 VB를 업데이트했습니다 ... 문제를 처리했습니다.
여기에 오래된 답변 :
라운드 () 대신 플로어 ()을 시도하십시오.
가장 가까운 정수에 무언가를 반올림하려면 다음을 수행 할 수 있습니다.
declare @floatmyboat float
set @floatmyboat = 1.51
select floor(@floatmyboat+0.5)
추신 : 아마도 당신이 얻는 정확한 오류를 게시 할 수 있습니다. "라운드 기능에는 2 ~ 3 인수가 필요합니다."라면 SQL Server가 라운드 ()에서 borking을 의미합니다.
다른 팁
Round () 함수는 SQL Server에도 존재합니다.
유일한 차이점은 : 액세스에서 정밀도는 선택적 매개 변수이지만 SQL Server에서는이를 지정해야합니다.
따라서 이것은 액세스에서만 작동하지만 SQL Server에서는 작동하지 않습니다.
select round(Column) from Table
이것은 액세스에서 작동합니다 그리고 SQL Server :
select round(Column,1) from Table
Access는 DLL을 사용할 수 있으며 라운드 기능이 있습니다.
ACE/JET는 VBA와 공유 표현 서비스를 사용합니다. 광범위하게 말하면, ACE/JET은 인수와 반환 값이 스칼라 유형 (예 : 어레이, 객체 없음) 인 모든 VBA5 함수 (방법과 구별) 표현식으로 지원합니다. 그만큼 Round()
표현식은이 정의에 속하며 실제로 VBA 기능과 동일한 의미를 가진 ACE/JET에서 사용할 수 있습니다. 그러나 ACE/Jet 엔진에 익숙한 사람이라면 누구나 알 수 있듯이 Semantics는 VBA 등가와 다를 수 있습니다.
SELECT TYPENAME(ROUND(5, 1))
VBA는 '길다'를 반환합니다
?Typename(Round(5, 1))
'정수'를 반환합니다.
다시 말해, Round()
여기서 문제가되지 않을 것입니다.