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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Ms access 在VBA中将Access查询类型从直通(ODBC)查询动态更改为常规选择查询_Ms Access_Vba_Ms Access 2013 - Fatal编程技术网

Ms access 在VBA中将Access查询类型从直通(ODBC)查询动态更改为常规选择查询

Ms access 在VBA中将Access查询类型从直通(ODBC)查询动态更改为常规选择查询,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,我感兴趣的是动态使用MicrosoftAccess查询,有时作为使用ODBC访问远程SQL Server的传递查询,有时作为本地Select查询访问同一Access数据库中的表。但是,QueryDef.Type属性是只读的,我不知道如何更改它 所以在代码中它看起来像: Dim qd As DAO.QueryDef Set qd = CurrentDB.QueryDefs("qrySubForm1") 'this line turns the qd.Type property to dbQSQL

我感兴趣的是动态使用MicrosoftAccess查询,有时作为使用ODBC访问远程SQL Server的传递查询,有时作为本地Select查询访问同一Access数据库中的表。但是,QueryDef.Type属性是只读的,我不知道如何更改它

所以在代码中它看起来像:

Dim qd As DAO.QueryDef
Set qd = CurrentDB.QueryDefs("qrySubForm1")

'this line turns the qd.Type property to dbQSQLPassThrough automatically I believe
qd.Connect = "ODBC;--connectionstring--"  

qd.SQL = "Select * from SomeRemoteTable"

'populate the subform with the results of the Pass Through query
SubForm1.SourceObject = "Query.qrySubForm1" 

'Intent: change to regular select query.
qd.Type = dbQSelect   ' Error: read-only property

qd.SQL = "Select * from ALocalTable"

' now change the SubForm to show results of the local query
SubForm1.SourceObject = "Query.qrySubForm1"  
QueryDef Type属性是枚举中的值之一

如果我在两个本地查询之间切换,或者在两个直通查询之间切换,效果会很好。只有当我尝试在直通查询和本地查询之间切换时,我才会遇到问题

更新:
对另一个SO问题的回答似乎建议我可以向查询定义中添加属性,但我不确定这是否适用于“Type”的情况。

正确的方法是删除并创建QueryDef

在更改为本地表之前添加以下内容:

DoCmd.DeleteObject acQuery, qd.name
Set qd= MyDB.CreateQueryDef(qd.name)
qd.SQL = "Select * from ALocalTable;"
qd.close
如果你想回到passthrough:

DoCmd.DeleteObject acQuery, qd.name
Set qd= MyDB.CreateQueryDef(qd.name)
qd.connect = GET_CONNECTION_STRING
qd.SQL = "Select * from SomeRemoteTable;"
qd.close

对于更新查询,设置“qd.ReturnsRecords=false”

正确的方法是删除并创建QueryDef

在更改为本地表之前添加以下内容:

DoCmd.DeleteObject acQuery, qd.name
Set qd= MyDB.CreateQueryDef(qd.name)
qd.SQL = "Select * from ALocalTable;"
qd.close
如果你想回到passthrough:

DoCmd.DeleteObject acQuery, qd.name
Set qd= MyDB.CreateQueryDef(qd.name)
qd.connect = GET_CONNECTION_STRING
qd.SQL = "Select * from SomeRemoteTable;"
qd.close

对于按性质设置为“qd.ReturnsRecords=false”的更新查询,传递查询具有ODBC连接。这对于本地查询不是必需的,因为您可以简单地执行SQL。为什么不抓取SQL(比如:currentdb.querydfs(“passthru”).SQL)然后执行(但不使用之前的连接)?如果这两个查询有不同的SQL(如代码所示),我只保留这两个查询。并且只有开关
子窗体1.SourceObject
。就其性质而言,直通查询具有ODBC连接。这对于本地查询不是必需的,因为您可以简单地执行SQL。为什么不抓取SQL(比如:currentdb.querydfs(“passthru”).SQL)然后执行(但不使用之前的连接)?如果这两个查询有不同的SQL(如代码所示),我只保留这两个查询。并且只切换
子表单1.SourceObject
。我将在下周才能确认它是否有效,但从逻辑上讲,我认为它会正常工作。我不认为只是删除查询定义并重新创建它。谢谢下周我才能确认这是否有效,但从逻辑上讲,我认为这会很好。我不认为只是删除查询定义并重新创建它。谢谢