2016-12-09 4 views
0

SQL Server의 레코드로 연속 하위 폼을 채우는 쿼리가 있습니다. 아래 코드와 같이 코드를 작성하면 모든 것이 정상적으로 채워집니다.MS 액세스 날짜가 나에게 위로 전환

Me.RecordSource = "SELECT viewTask.* FROM viewTask WHERE StartDate <= 42720 and EndDate >= 42720" 

그러나 끝에 조건을 추가하면 (아래 참조) 내 날짜가 갑자기 2 씩 옵셋됩니다! (위의 쿼리를하기 2 일 전).

Me.RecordSource = "SELECT viewTask.* FROM viewTask WHERE StartDate <= 42720 and EndDate >= 42720 or ID = 16801;" 

나는 MS 액세스가 윤년으로 1900 카운트 0 대신 1에서 시작하지만 왜이 시점에서 이런 일이 있기 때문에 2 SQL 서버와 다른 이상한 일을 가지고 알아? 이것은 나를 슬프게 만든다.

편집 : ID = 상태가 갑자기 액세스하려면 SQL에서 날짜의 해석을 변경 추가,하지만 하나의 대답은 내가 허용 대답으로 표시 한 있도록 문제를 해결 왜 답변 중에 지금까지 말해주지.

답변

1

첫째, 당신의 기준은 기본 보정이 필요합니다 :

Me.RecordSource = "SELECT viewTask.* FROM viewTask WHERE (StartDate <= 42720 and EndDate >= 42720) or ID = 16801;" 

둘째, 당신은 항상 날짜 값이 아닌 숫자, 문자열이 아니라, 예외없이 같은 날짜를 지정해야합니다. 따라서 :

Me.RecordSource = "SELECT viewTask.* FROM viewTask WHERE (StartDate <= #2016/12/16# and EndDate >= #2016/12/16#) or ID = 16801;" 

또는 :

내가 and`이 or``전에 항상 실행하지만, 어쨌든 '때문에 괄호가 결과에 영향을 미치지 않습니다 생각
Me.RecordSource = "SELECT viewTask.* FROM viewTask WHERE (StartDate <= DateSerial(2016,12,16) and EndDate >= DateSerial(2016,12,16) or ID = 16801;" 
+2

는 명시 적으로 실행 순서가 자네 말이 맞아 –

+0

좋을 것이다 동의 . _Between-And_가 먼저 평가 된 다음 _Or_의 두면이 평가됩니다. – Gustav

+0

그래서 내 SQL 뷰에서 VBA에서 사용하는 날짜 값 문자열로 날짜를 변환해야합니까? – Mike

0

이 시도 :

Me.RecordSource = "SELECT viewTask.* FROM viewTask WHERE (StartDate <= 42720 and EndDate >= 42720) or ID = 16801;" 
0

는 SQL 서버 측면에서 평가 된 첫 번째 경우의 SQL처럼 보이는 - 직접 SQL 서버로 전달, 0 1/1로 해석 SQL 측에서 날짜로 변환이 경우 번호에/1900 Access에서 먼저 평가 된 Second Select는 액세스 규칙에 따라 날짜를 숫자로 변환합니다. 여기서 0은 1/31/1899이며, 인수가있는 날짜가있는 SQL 서버로 전달됩니다. 두 경우 모두 SQL Server에 전달 된 SQL을 catch하고 내 버전을 확인할 수 있습니다.

따라서 Access로 변환 규칙이 다른 서버로 작업 할 때 명시적인 날짜 대신 숫자를 사용하는 것에 매우주의하십시오. SQL Pass-through 쿼리를 사용하지 않으면 Access 측에서 추가 평가없이 SQL이 서버로 전달된다는 것을 확신 할 수 없습니다.