2014-07-05 2 views
4

현재 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으로 수행 할 수있는 방법이 있습니까? 감사.

+0

나는 오래된 버그로 의심됩니다. '97을 사용 했으므로 오랜 시간이 걸렸지 만 SQL보기에서 편집을 시도하고 'INNER JOIN [...]'을 'INNER JOIN (...)'으로 바꾸십시오.이 방법은 2000 년에 사용되었지만 곧 사용됩니다 디자인보기에서 열면 쿼리가 다시 손상됩니다. – Fionnuala

+0

@Remou 예, Access 2000에서도이 동작을 관찰했습니다. 아쉽게도 Access 97은 'INNER JOIN (...)'구문을 지원하지 않으며 구문 오류로 분류됩니다. 그러므로 나는 INNER JOIN [...] 구문을 사용해야 만한다. – Aurora

+0

그냥 .. 추측 디자인 창보다는 코드에서 (...) 시도해 보셨습니까? – Fionnuala

답변

4

마지막으로, 많은 수의 시험 후 & 오류 세션이 있었지만 해결책을 찾았습니다. 이 줄은 작업을 보인다 또한 서로 후 2 개 여는 대괄호를 배치 방지 :

FROM Table2 IN '' ';database=C:\db\db2.mdb;PWD=mypwd' 

그것은이 적절한 방식으로 어딘가에 문서화되지 않았 수치이다.

-1
Create Qry1 ="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 " 

SELECT T.TPartyId, Name, T.TDate, T.TValue 
FROM Table1 INNER JOIN Qry1 
ON (Table1.PartyId = Qry1.TPartyId); 
관련 문제