ms-access - 从另一个数据库 Access SQL 查询

标签 ms-access vba

我想对一个 Access 表应用 SQL 查询,并从中检索另一个 Access 文件中的表中的数据。我环顾四周,似乎无法找到可行的解决方案。

基于此来源 http://support.microsoft.com/kb/113701 ,我想出了以下内容,但仍然没有运气。

sSQL = "UPDATE TableInCurrentDB 
SET [Field1InCurrentDB]= DAvg('Field1InExternalDB','[;database=C:\VB\ExternalDB.accdb].[TableInExternalDB]','Field2InExternalDB= & Year(Now()) & ') 
WHERE [Field2InCurrentDB]='1';"
DoCmd.RunSQL sSQL

我知道错误出在对外部数据库的引用中,因为如果表位于同一数据库中,代码可以正常工作。但是,很难准确判断出了什么问题,因为我得到的错误是“未知”。

如何修改此语句以从另一个 Access 数据库的表更新 Access 表?

最佳答案

您不希望使用外部数据库中表的链接,但当您想要使用 DAvg 时,这种选择会很复杂。但是,由于您使用 VBA 代码执行此操作,因此您可以放弃 DAvg 并通过 2 个步骤完成您需要的操作:

  1. 首先从外部表中检索平均值。
  2. 更新中使用第 1 步的平均值。

对于第 1 步,在 Access 查询设计器中将其作为新查询进行测试...

SELECT Avg(Field1InExternalDB)
FROM TableInExternalDB IN 'C:\VB\ExternalDB.accdb'
WHERE Field2InExternalDB=Year(Date());

假设查询返回正确的值,请调整您的 VBA 代码以检索相同的值。

Dim db As DAO.database
Dim strSelect As String
Dim varAvg As Variant
strSelect = "SELECT Avg(Field1InExternalDB)" & vbCrLf & _
    "FROM TableInExternalDB IN 'C:\VB\ExternalDB.accdb'" & vbCrLf & _
    "WHERE Field2InExternalDB=Year(Date());"
'Debug.Print strSelect
Set db = CurrentDb
varAvg = db.OpenRecordset(strSelect)(0)
Debug.Print Nz(varAvg, 0) ' see note

请注意,当没有行包含与当前年份匹配的 Field2InExternalDB 值时,查询将返回 Null。这就是 varAvg 被声明为 Variant 的原因。稍后 Nz(varAvg, 0) 将为您提供零而不是 Null。

然后,您可以对 UPDATE 使用参数查询并提供 Nz(varAvg, 0) 作为参数值。

Dim qdf As DAO.QueryDef
Dim strUpdate As String
strUpdate = "UPDATE TableInCurrentDB" & vbCrLf & _
    "SET [Field1InCurrentDB]=[pAvg]" & vbCrLf & _
    "WHERE [Field2InCurrentDB]='1';"
'Debug.Print strUpdate
Set qdf = db.CreateQueryDef(vbNullString, strUpdate)
qdf.Parameters("pAvg") = Nz(varAvg, 0)
qdf.Execute dbFailOnError
Set qdf = Nothing
Set db = Nothing

关于ms-access - 从另一个数据库 Access SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076622/

相关文章:

vba - 更改 SmartArtNode 的宽度或高度

vba - 文本到行 VBA Excel

vba - 将 Access 查询结果导出到 csv

c# - OleDb 连接打开时出现 SEHException

date - Access 2010+自动生成ID的日期+4位序号

security - 从 VBA (MS Access) 解密 PGP 加密文件的最简单方法

excel - 处理 Visual Basic for Applications 中缺少 Internet 连接的问题

excel - 如何以编程方式从 Excel 中的 VBA 宏中删除数字签名?

vba - 删除用户表单中动态创建的文本框的问题

c# - 使用 MS Access 插入语句 C#