Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS Access VBA直通查询连接字符串错误(ODBC)_Sql_Ms Access_Odbc - Fatal编程技术网

Sql MS Access VBA直通查询连接字符串错误(ODBC)

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

我目前正在尝试使用连接到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=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”;