현재 Access 97에 대한 SQL 쿼리를 작성 중입니다. 각 테이블은 별도의 mdb 파일에있는 다음 테이블 (데모 용으로 단순화 됨)이 제공됩니다.Access 97의 SQL 쿼리에서 다른 암호로 보호 된 데이터베이스 액세스
C에서표 : \ DB \ DB1.MDB : C에서
PartyId (PK) Name
------------ --------
1 A
2 B
3 C
표 2 : \ DB \ db2.mdb :
여기PartyId (PK) Date (PK) Value
------------ --------- -----
1 6/30/2014 4
1 7/1/2014 8
2 5/3/2014 3
3 5/5/2014 5
3 5/3/2014 1
3 5/2/2014 2
내가 가장 최근의 값을보고 싶습니다 각 p의 arty, 정의 된 날짜를 기반으로합니다. 나는 C에서 다음 쿼리를 만든
PartyId Name Date Value
------- ---- -------- -----
1 A 7/1/2014 8
2 B 5/3/2014 3
3 C 5/5/2014 5
: \ DB \ DB1.MDB 데이터베이스 그래서 목표 날짜로 2014년 7월 5일 레이블 것,의 말을하자, 그 다음 내 쿼리는 다음을 반환해야 :
SELECT T.TPartyId, Name, T.TDate, T.TValue
FROM Table1 INNER JOIN [
SELECT Table2.PartyId AS TPartyId, MAX(Table2.Date) AS TDate, FIRST(Value) AS TValue
FROM Table2 IN 'C:\db\db2.mdb'
WHERE Table2.Date <= #7/5/2014#
GROUP BY Table2.PartyId]. AS T
ON (Table1.PartyId = T.TPartyId);
문제는 Table2가 실제로 암호로 보호 된 데이터베이스 파일에 있다는 것입니다. 다음에, http://support.microsoft.com/kb/113701에 설명 된대로 따라서, 나는 쿼리를 수정하는 것을 시도했다 :
SELECT T.TPartyId, Name, T.TDate, T.TValue
FROM Table1 INNER JOIN [
SELECT Table2.PartyId AS TPartyId, MAX(Table2.Date) AS TDate, FIRST(Value) AS TValue
FROM [;database=C:\db\db2.mdb;PWD=mypwd].Table2
WHERE Table2.Date <= #7/5/2014#
GROUP BY Table2.PartyId]. AS T
ON (Table1.PartyId = T.TPartyId);
그러나, 이것은 항상 구문 오류가 발생합니다. 나는 그 후속 대괄호에서 찾을 수 있다고 의심한다.
INNER JOIN [ … [;database= … ] … ]
진술은 실패의 원인이다. 불행히도 Access 97에서는 항상 별표가 대괄호로 묶인 다음 마침표가 있어야하지만 Access 2000 이상에서는 이러한 제한이 없습니다. 그럼에도 불구하고이 쿼리를 Access 97으로 수행 할 수있는 방법이 있습니까? 감사.
나는 오래된 버그로 의심됩니다. '97을 사용 했으므로 오랜 시간이 걸렸지 만 SQL보기에서 편집을 시도하고 'INNER JOIN [...]'을 'INNER JOIN (...)'으로 바꾸십시오.이 방법은 2000 년에 사용되었지만 곧 사용됩니다 디자인보기에서 열면 쿼리가 다시 손상됩니다. – Fionnuala
@Remou 예, Access 2000에서도이 동작을 관찰했습니다. 아쉽게도 Access 97은 'INNER JOIN (...)'구문을 지원하지 않으며 구문 오류로 분류됩니다. 그러므로 나는 INNER JOIN [...] 구문을 사용해야 만한다. – Aurora
그냥 .. 추측 디자인 창보다는 코드에서 (...) 시도해 보셨습니까? – Fionnuala