Ms access 传递查询中的变量';ODBC连接Str';
我试图在Microsoft Access中的SQL直通查询中的“ODBC Connect Str”属性中使用全局常量变量(在独立模块中)为了清楚起见,我使用的是GUI,我了解如何在VBA中使用它。如果我不使用变量,它会起作用,下面是连接字符串:Ms access 传递查询中的变量';ODBC连接Str';,ms-access,Ms Access,我试图在Microsoft Access中的SQL直通查询中的“ODBC Connect Str”属性中使用全局常量变量(在独立模块中)为了清楚起见,我使用的是GUI,我了解如何在VBA中使用它。如果我不使用变量,它会起作用,下面是连接字符串: ODBC;Driver=SQL Server;Server=pabxsoftdrt;Database=DRT;Trusted_Connection=True; 我试图用常量drtHostname替换服务器值。我尝试过但没有成功的事情(为了便于阅读,我省
ODBC;Driver=SQL Server;Server=pabxsoftdrt;Database=DRT;Trusted_Connection=True;
我试图用常量drtHostname
替换服务器值。我尝试过但没有成功的事情(为了便于阅读,我省略了可信连接):
我认为您的问题是关于传递查询的
QueryDef.Connect
属性。我认为该属性不可能引用变量
连接字符串可以改用DSN,然后在服务器名称更改时修改DSN。但是您的所有用户都需要在他们的机器上安装DSN
或者,您可以在需要时使用VBA更新QueryDef.Connect
属性。下面是一个函数的即时窗口示例,该函数更改连接字符串中的服务器部分
strConnect=“ODBC;Driver=sqlserver;Server=pabxsoftdrt;”和_
“数据库=DRT;可信连接=True;”
drtHostname=“新闻服务器”
? ChangeServer(strConnect、drtHostname)
ODBC;驱动程序=SQL Server;服务器=新闻服务器;数据库=DRT;Trusted_Connection=True;
因此,您可以调用函数来更新保存的直通查询的连接字符串
与CurrentDb.querydfs(“您的查询”)
.Connect=ChangeServer(.Connect,drtHostname)
以
使用正则表达式,函数的工作很简单
Public Function ChangeServer(ByVal pConnect作为字符串_
ByVal pServer作为字符串)作为字符串
将re设置为对象“RegExp”
Set re=CreateObject(“VBScript.RegExp”)
re.IgnoreCase=True
re.pattern=“服务器=[^;]*”
ChangeServer=re.Replace(pConnect,“Server=”和pServer)
端函数
或者,您可以将其全部放在SQL中,并在执行之前替换它
where ptqSQL has
.. .. ..
From
[ODBC;Driver=SQL Server;Server=@Svr1;Database=@Db1;].dbo.Tbl1 as T1
Left Join (Select * From
[ODBC;Driver=SQL Server;Server=@Svr2;Database=@Db2;].dbo.Tbl2 as T2
然后在获得sSQL=CurrentDb.querydfs(“ptq_SQL”).SQL之后
进行替换(Svr、Db、Tbl可能已经在ptq_SQL中明确)
然后执行它
Dim rst As ADODB.Recordset, nRecAffected As Long
Set rst = yourConnection.Execute(sSQL, nRecAffected)
我还需要在查询中使用参数&如果没有kb131534所示的VBA,这似乎是不可能的。我感觉上述情况也是如此
sSQL = Replace(sSQL, "@Svr1", "xxx:)
sSQL = Replace(sSQL, "@Db1", "xxx:)
sSQL = Replace(sSQL, "@Tbl1", "xxx:)
sSQL = Replace(sSQL, "@Svr2", "xxx:)
sSQL = Replace(sSQL, "@Db2", "xxx:)
sSQL = Replace(sSQL, "@Tbl2", "xxx:)
Dim rst As ADODB.Recordset, nRecAffected As Long
Set rst = yourConnection.Execute(sSQL, nRecAffected)