Sql MS Access VBA直通查询连接字符串错误(ODBC)
我目前正在尝试使用连接到oracle数据库的VBA编写传递查询。使用中提供的答案作为起点,我有以下VBA代码Sql MS Access VBA直通查询连接字符串错误(ODBC),sql,ms-access,odbc,Sql,Ms Access,Odbc,我目前正在尝试使用连接到oracle数据库的VBA编写传递查询。使用中提供的答案作为起点,我有以下VBA代码 Option Compare Database Sub Test_PassThroughQuery() Dim qdf As DAO.QueryDef, rst As DAO.Recordset Set qdf = CurrentDb.CreateQueryDef("") qdf.Connect = "ODBC;DSN=database_name;UID=username;PWD=p
Option Compare Database
Sub Test_PassThroughQuery()
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;DSN=database_name;UID=username;PWD=password;DBQ=ADPR;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;"
qdf.SQL = "SELECT * FROM DATE_TABLE"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
Debug.Print rst
rst.Close
Set rst = Nothing
Set qdf = Nothing
End Sub
但是,这会在Debug.Print rst
上提示错误类型不匹配
对于连接字符串,我使用属性选项卡中的ODBC连接字符串
EDIT我是否错误地调用了Debug.print rst
行?创建传递查询的方法很多。如果要在Access中保存传递查询,可以设置CreateQueryDef
的第一个参数:
Sub Test_PassThroughQuery()
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("MyPassthroughQuery")
qdf.Connect = "ODBC;DSN=database_name;UID=username;PWD=password;DBQ=ADPR;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;"
qdf.SQL = "SELECT * FROM DATE_TABLE"
qdf.ReturnsRecords = True
DoCmd.OpenQuery "MyPassthroughQuery"
End Sub
这将创建一个已保存的查询并将其打开
您还可以在Access中查询外部数据源,这允许您使用查询设计器,并在单个查询中使用本地表和外部数据:
SELECT *
FROM [ODBC;DSN=database_name;UID=username;PWD=password;DBQ=ADPR;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;].DATE_TABLE
有许多方法可以创建传递查询。如果要在Access中保存传递查询,可以设置CreateQueryDef
的第一个参数:
Sub Test_PassThroughQuery()
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("MyPassthroughQuery")
qdf.Connect = "ODBC;DSN=database_name;UID=username;PWD=password;DBQ=ADPR;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;"
qdf.SQL = "SELECT * FROM DATE_TABLE"
qdf.ReturnsRecords = True
DoCmd.OpenQuery "MyPassthroughQuery"
End Sub
这将创建一个已保存的查询并将其打开
您还可以在Access中查询外部数据源,这允许您使用查询设计器,并在单个查询中使用本地表和外部数据:
SELECT *
FROM [ODBC;DSN=database_name;UID=username;PWD=password;DBQ=ADPR;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;].DATE_TABLE
嗯。。。该表中是否有名为qryTest
的字段?你需要在那里输入一个字段名。哎呀,对不起,我刚刚意识到我在复制粘贴中删除了它。让我将调整后的代码与接收到的错误放在一起。您希望如何处理passthrough查询?我觉得你根本不想打开记录集你是对的。目前,我只想显示与运行查询时相同的数据。接下来,我想将数据保存到本地表中。问题是,我希望首先使用VBA获得一个工作传递查询,然后解决这个问题。Debug.Print rst(0)
将工作(并打印第一行的第一个字段)。如果提取记录,rst
无法打印,因为它不是字符串(导致错误的原因是类型不匹配
),它是一个记录集,类似于一个数组。呃。。。该表中是否有名为qryTest
的字段?你需要在那里输入一个字段名。哎呀,对不起,我刚刚意识到我在复制粘贴中删除了它。让我将调整后的代码与接收到的错误放在一起。您希望如何处理passthrough查询?我觉得你根本不想打开记录集你是对的。目前,我只想显示与运行查询时相同的数据。接下来,我想将数据保存到本地表中。问题是,我希望首先使用VBA获得一个工作传递查询,然后解决这个问题。Debug.Print rst(0)
将工作(并打印第一行的第一个字段)。如果提取记录,rst
无法打印,因为它不是字符串(导致错误的原因是类型不匹配
),它是一个记录集,与数组类似。我在DoCmd.OpenQuery id之前也做了:DoCmd.SetWarnings True,查询后DoCmd.SetWarnings False。我还做了DoCmd.DeleteObject acQuery,“MyPassthroughQuery”。可能可以从现有链接表获取连接:set db=CurrentDb.TableDefs(“表名”)。Connect通常等于“ODBC;DSN=database_NAME”;我在DoCmd.OpenQuery id之前也做了:DoCmd.SetWarnings True,查询后DoCmd.SetWarnings False。我还做了DoCmd.DeleteObject acQuery,“MyPassthroughQuery”。可能可以从现有链接表获取连接:set db=CurrentDb.TableDefs(“表名”)。Connect通常等于“ODBC;DSN=database_NAME”;