访问表将链接到SQL Server上的表,当访问数据更改时更新

时间:2018-09-04 16:08:53

标签: sql-server excel ms-access azure-sql-database

我有一个Access数据库,该数据库链接到多个Excel文件并连接到Google Analytics(分析)。

我创建了一个Unison查询,将所有文件和表合并到一个表中。

我需要其他用户通常可以通过excel powerpivot表访问和刷新此表。我设置了一个Azure SQL服务器,并执行了导出向导来移动数据,该方法可以正常工作,但是我无法使用新数据更新它(我每天都需要这样做)。仅仅共享访问数据库是行不通的,因为不是每个人都有相同的文件结构。

如何在Access中获取表以链接到SQL,以便在Access中对其进行更新时,SQL中的表也会更新?

1 个答案:

答案 0 :(得分:0)

将表手动导出到Azure SQL Server之后,只需将该表链接到MS Access应用程序,然后手动或通过代码自动运行操作查询以进行每日更新。

  1. Linked SQL Server Table

    这是MSAccess.exe的一个众所周知的功能,它能够连接到从Oracle和SQL Server到Quickbooks和Salesforce的几乎任何与ODBC / OLEBD兼容的数据源。要求包括:

    • Azure SQL Server ODBC驱动程序或先前创建的Data Source Name (DSN)
    • 确保连接的用户具有读/写表特权(在服务器上分配)
    • 遍历向导进行初始设置(请参阅“外部数据”下的ODBC数据库选项)


    enter image description here

  2. 动作查询

    SQL (另存为MS Access存储的查询,可以双击对象以手动运行)

    df.sort_values('A').drop_duplicates('Name',keep='last').sort_index() Out[126]: Name A B C 1 Jon 1 0 1 2 Alan 1 0 0 3 Shaya 0 1 1 INSERT子句中的列数应相等,并且每个对应的类型应匹配(省去自动编号)。

    SELECT

    或者,如果您需要运行INSERT INTO mySQLServerTable (Col1, Col2, Col3, ...) SELECT e.Col1, e.Col2, e.Col3, ... FROM myExcelTable AS e 查询,要求在两个表源之间使用匹配列。

    UPDATE

    VBA (MS Access内部自动运行存储的查询)

    UPDATE mySQLServerTable s
    INNER JOIN myExceltable e ON e.MatchColumn = s.MatchColumn
    SET s.Col1 = e.Col1, s.Col2 = e.Col2, s.Col3 = e.Col3, ...
    

相反,您可以运行SQL Server查询,该查询使用OPENROWSET从外部MS Access源插入到表中。假定数据库可以从SQL Server驻留的位置访问。

' WARNS USER OF NUMEBR OF ROWS TO BE INSERTED/UPDATED
DoCmd.OpenQuery "myActionQuery"

' DOES NOT WARN USER
CurrentDb.Execute "myActionQuery", dbFailOnError