在Access 97中的SQL查询中访问另一个受密码保护的数据库

在Access 97中的SQL查询中访问另一个受密码保护的数据库,sql,ms-access,jet,ms-access-97,Sql,Ms Access,Jet,Ms Access 97,我目前正在处理Access 97的SQL查询。给出了以下表格(为了演示而简化),每个表格位于单独的mdb文件中: C:\db\db1.mdb中的表1: PartyId (PK) Name ------------ -------- 1 A 2 B 3 C C:\db\db2.mdb中的表2: PartyId (PK) Date (PK) Value ------------

我目前正在处理Access 97的SQL查询。给出了以下表格(为了演示而简化),每个表格位于单独的mdb文件中:

C:\db\db1.mdb中的表1:

PartyId (PK)    Name
------------    --------    
1               A
2               B
3               C
C:\db\db2.mdb中的表2:

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
在这里,我想根据定义的日期查找各方的最新值。比如说,我将2014年7月5日标记为目标日期,那么我的查询应该返回以下内容:

PartyId    Name    Date        Value
-------    ----    --------    -----
1          A       7/1/2014    8
2          B       5/3/2014    3
3          C       5/5/2014    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 [;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);
我在C:\db\db1.mdb数据库中创建了以下查询:

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);

语句是失败的原因。不幸的是,Access 97总是要求别名用方括号括起来,后跟一个句号,而Access 2000及更高版本没有此限制。尽管如此,使用Access 97是否可以完成此查询?谢谢。

经过无数次尝试和错误,我终于找到了解决方案。这一行似乎很有效,也避免了将两个开口方括号放在彼此后面:

FROM Table2 IN '' ';database=C:\db\db2.mdb;PWD=mypwd'
遗憾的是,这没有以适当的方式记录在某个地方。

Create Qry1=“选择Table2.PartyId作为TPartyId,
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);
最大值(表2.日期)作为TDate,第一个(值)作为TValue FROM[;database=C:\db\db2.mdb;PWD=mypwd].表2
WHERE Table2.Date我怀疑有一个老bug。我使用'97已经很久了,但是您是否尝试过在SQL视图中编辑并用
内部联接(…)替换
内部联接[…]
这在2000年曾经有效,但一旦在“设计”视图中打开,查询就会再次中断。@Remou是的,我在Access 2000中也观察到了这种行为。不幸的是,Access 97不支持
内部联接(…)
语法并将其归类为语法错误。因此,我被迫使用
内部联接[…]
语法。猜猜看….,您是否在代码中尝试过(…),而不是在查询设计窗口中?@Remou当我在代码中创建查询时(例如,通过ADO接口在VBA中),同时使用
内部联接(…[;数据库=…])
syntax,限制消失了。这与Access 2000及更高版本显示的行为相同。因此,该语法似乎与合法的JET语句有关,Access 97拒绝支持该语句。不幸的是,将查询外包到代码中不是一个可行的选项,因为我正在处理的任务要求将查询嵌入到他访问数据库。我的意思是你可以用DAO来构建保存的查询:
qdf.sql=…
?这只是一个模糊的希望。
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);