Access中远程脱机数据库中的更新表

时间:2019-01-03 15:40:40

标签: sql ms-access access-vba

我知道这有点愚蠢,但是我对如何更新离线数据库有疑问。

我在同一个文件夹中有各种数据库(它们都是脱机和可重新分发的-是一种可与SAP生成的csv和txt文件一起使用的分析工具。)对于公司来说,使该工具脱机并进行操作至关重要通过VBA for Access + SQL。我试图通过使用各种数据库来绕过2GB的限制。其中之一是中央数据库,我在其中拥有表单并运行代码。我有各种联接查询,它们创建用于报表等的新表。

如何将两个表(现有表)联接到远程脱机数据库(现有表)中并将其插入数据库(现有表)中的新表(不存在)中?

with max
as 
(select model, price from pc
union 
select model, price from laptop
union 
select model, price from printer)

select model from max
where price = (select max(price) from max)

dbinput是一个名为UNION的数据库,具有表AGR_USERS_ALL,USR_02_ALL,并且这些表位于(FROM)

dboutput是一个名为MASTER的数据库,这是我要插入表(IN)的地方

Sub adddatesALT()
Dim sDate As String
DoCmd.SetWarnings False
Dim ssql as String

简短内容-如何将路径合并到更新查询中?

dbinput = "[" & Application.CurrentProject.Path & "\UNION.accdb" & "]"
dboutput = "[" & Application.CurrentProject.Path & "\MASTER.accdb" & "]"

主要问题-如何将路径整合到更复杂的查询中

DoCmd.RunSQL ("UPDATE AGR_USERS_ALL SET AGR_USERS_ALL.JNC_STATUS = 'ACTIVE' WHERE ((AGR_USERS_ALL.TO_DAT) > (AGR_USERS_ALL.CH_DATE));")

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式


  1. 使用IN Clause

简短的给出

DoCmd.RunSQL ("UPDATE AGR_USERS_ALL IN '" & dboutput  & "' SET AGR_USERS_ALL.JNC_STATUS = 'ACTIVE' WHERE ((AGR_USERS_ALL.TO_DAT) > (AGR_USERS_ALL.CH_DATE));")

  1. Link外部表。

这对我来说是最好的解决方案。链接表是Access的优势之一,您的查询将保持简单。

要高效地执行此操作,请在链接的表名之前添加其数据库名,以便您始终知道哪个DB是表

简短的给出

DoCmd.RunSQL ("UPDATE MASTER_AGR_USERS_ALL SET MASTER_AGR_USERS_ALL.JNC_STATUS = 'ACTIVE' WHERE ((MASTER_AGR_USERS_ALL.TO_DAT) > (MASTER_AGR_USERS_ALL.CH_DATE));")

对“主要”使用完全相同的技巧。不管它是UPDATE还是SELECT语句,还是查询是大查询还是短查询都无所谓。

答案 1 :(得分:0)

非常感谢您!

在此期间,我找到了解决方案,但我也会听取您的建议;)

我的解决方法是:

Sub USR02AGRJOIN()
Dim ssql As String
Dim ssql2 As String
DoCmd.SetWarnings False

Dim dbinput As String
Dim dboutput As String

dboutput = "[" & Application.CurrentProject.Path & "\MASTER.accdb" & "]"
dbinput = "'" & Application.CurrentProject.Path & "\UNION.accdb" & "'"

ssql = "SELECT AGR_USERS_ALL.AGR_NAME, AGR_USERS_ALL.UNAME, AGR_USERS_ALL.FROM_DAT, AGR_USERS_ALL.TO_DAT, AGR_USERS_ALL.COL_FLAG, AGR_USERS_ALL.JNC_STATUS, USR_02_ALL.JNC_STATUS, USR_02_ALL.USTYP, USR_06_ALL.LIC_TYPE INTO " & dboutput & ".USR02_AGR_ACTIVE_ROLES"
ssql = ssql & " FROM (AGR_USERS_ALL INNER JOIN USR_02_ALL ON (AGR_USERS_ALL.UNAME = USR_02_ALL.BNAME) AND (AGR_USERS_ALL.[SYSTEM NO] = USR_02_ALL.[SYSTEM NO])) INNER JOIN USR_06_ALL ON (USR_02_ALL.BNAME = USR_06_ALL.BNAME) AND (USR_02_ALL.[SYSTEM NO] = USR_06_ALL.[SYSTEM NO]) IN " & dbinput & ""
ssql = ssql & " WHERE (((AGR_USERS_ALL.COL_FLAG) Is Null) AND ((AGR_USERS_ALL.JNC_STATUS)<>'Expired') AND ((USR_02_ALL.JNC_STATUS)<>'Expired') AND ((USR_02_ALL.USTYP)<>'B' And (USR_02_ALL.USTYP)<>'L'));"
DoCmd.RunSQL ssql

End Sub

我只是在语法上苦苦挣扎:)

再次感谢您!