sql-server - 将链接到 SQL Server 上的表的访问表,当访问数据更改时更新
问题描述
我有一个 Access 数据库,它链接多个 Excel 文件并连接到 Google Analytics。
我创建了一个 Unison Query 以将所有文件和表放入一个表中。
我需要这个表可以被多个其他用户访问和刷新,通常是通过一个 excel powerpivot 表。我设置了一个 Azure SQL 服务器并执行了导出向导来移动数据,这可以工作,但我无法用新数据更新它(我需要每天都这样做)。简单地共享访问数据库是行不通的,因为不是每个人都有相同的文件结构。
如何让 Access 中的表链接到 SQL,所以当它在 Access 中更新时,SQL 中的表会更新?
解决方案
手动将表导出到 Azure SQL Server 后,只需将该表链接到 MS Access 应用程序,然后手动或通过代码自动运行操作查询以进行每日更新。
-
这是 MSAccess.exe 的一个众所周知的功能,能够连接到几乎任何符合 ODBC/OLEBD 的数据源,从 Oracle 和 SQL Server 到 Quickbooks 和 Salesforce。要求包括:
- Azure SQL Server ODBC 驱动程序或以前创建的数据源名称 (DSN)
- 确保连接的用户具有读/写表权限(在服务器上分配)
- 完成初始设置向导(请参阅外部数据下的 ODBC 数据库选项)
操作查询
SQL (另存为MS Access存储查询,可双击对象手动运行)
INSERT
和子句中的列数应该相等,SELECT
并且每个相应的类型应该匹配(省略自动编号)。INSERT INTO mySQLServerTable (Col1, Col2, Col3, ...) SELECT e.Col1, e.Col2, e.Col3, ... FROM myExcelTable AS e
或者,如果您需要
UPDATE
在两个表源之间运行需要匹配列的查询。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, ...
VBA (在 MS Access 中自动运行存储的查询)
' WARNS USER OF NUMEBR OF ROWS TO BE INSERTED/UPDATED DoCmd.OpenQuery "myActionQuery" ' DOES NOT WARN USER CurrentDb.Execute "myActionQuery", dbFailOnError
相反,您可以运行 SQL Server 查询,该查询使用OPENROWSET从外部 MS Access 源插入到您的表中。这假定可以从 SQL Server 所在的位置访问数据库。
INSERT INTO INSERT INTO mySQLServerTable (Col1, Col2, Col3, ...)
SELECT e.Col1, e.Col2, e.Col3, ...
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'C:\path\to\myDatabase.accdb', 'admin', '', myExcelTable) AS e
推荐阅读
- python - Pandas Duplicate() 一次返回所有重复项,除了一行
- memcached - Vtiger CRM 开源版本 7x(Meme Cache / Varnish?)
- kotlin - 预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径为 BEGIN_ARRAY $ ERROR
- telegram - 广播扩展将 PixelBuffer 发送到 OpenTok 服务器
- python - 在 ffmpeg 函数参数中传递字节而不是文件路径
- android - 创建一个没有 Json 数组名称的 Json 数组
- javascript - 更改 SVG 高度而不更改宽度或使其倾斜/拉伸
- postgresql - ORDER BY 和 ROW_NUMBER() 优先级 - DB2 和 PostgreSQL 返回不同的结果,相同的查询
- reactjs - 无法播放接收到的音频数据/缓冲区 Reactjs
- rust - battl 模拟引擎中的 Rust 借用检查器