Ms access 使用SAS触发MS访问功能

Ms access 使用SAS触发MS访问功能,ms-access,sas,vba,Ms Access,Sas,Vba,我是这里的新手,所以请温柔一点:) 我的问题是:我是否可以让SAS(9.4和PC文件服务器)触发MS ACCESS中的一个函数,该函数导入SAS先前输出的.txt文件 背景:我继承了一个Access数据库(.accdb,使用vers.2010),其源数据来自SAS。当前的方法是SAS输出.txt文件,我(半手动)将其导入数据库。半手动,有一个按钮/宏导入文件,但我必须打开数据库并按下按钮。我宁愿根本不干预 我试图通过使用PROC EXPORT(和PC FILES SERVER)和更高版本的PRO

我是这里的新手,所以请温柔一点:)

我的问题是:我是否可以让SAS(9.4和PC文件服务器)触发MS ACCESS中的一个函数,该函数导入SAS先前输出的.txt文件

背景:我继承了一个Access数据库(.accdb,使用vers.2010),其源数据来自SAS。当前的方法是SAS输出.txt文件,我(半手动)将其导入数据库。半手动,有一个按钮/宏导入文件,但我必须打开数据库并按下按钮。我宁愿根本不干预

我试图通过使用PROC EXPORT(和PC FILES SERVER)和更高版本的PROC SQL(通过libname分配Access数据库)直接从SAS推送数据来跳过表的导入。但是,与旧方法相比,在进行压缩和修复之后,数据库的大小仍然是旧方法的两倍左右。我在网上搜索了如何避免尺寸增加,但没有找到答案

因此,我希望保留SAS吐出.txt文件的方法,但同时让SAS在导入文件的数据库中触发Access函数

Access中的按钮激活此代码:

Private Sub ImportSASDataButton_Click()
Dim Update As Byte
    Update = MsgBox("Have you ran the SAS program that creates the text files?" _
                    , vbYesNo, "Check files have been created")

If Update = vbYes Then ImportTables
Me.CloseFormButton.SetFocus
Me.ImportSASDataButton.Enabled = False
End Sub
如果“是”激活此代码(这是我希望直接触发的功能):


有几个SAS语句可以启动外部程序,包括

  • %系统执行
  • 呼叫系统
  • 文件名管道
Access具有命令行开关
/x mymacro
,该开关将在启动时运行特定的宏,或者您可以创建或更新每次启动Access时自动运行的
AutoExec

所以您的SAS代码可能看起来像

%Spit;
%sysexec msaccess /x ImportTablesMacro;

@Richard向您展示了如何从SAS调用Access。如果您无法从SAS会话运行命令行(某些系统管理员禁用此功能),则可以编写shell脚本

首先调用SAS创建.txt文件


然后使用Richard描述的方法调用Access来运行宏。

谢谢@Richard。我知道在数据库启动时运行autoexec宏,但由于导入可能需要5分钟,而且数据库有一个前端供其他同事用于提取各种报告,因此这不是一个有效的解决方案。我对%sysexec的经验有限,因此为了确保我正确理解您,要从SAS触发代码,应该是%sysexec'PATH'/x importables;路径是访问数据库的路径。它能按原样触发模块中编写的Importables函数吗?还是我需要在包含VBA代码的宏下创建一个宏?这是一个潜在的用例,可以证明我们可以升级到SQL Server或Azure来存储数据。Access仍然可以用于报告和输入前端。谢谢@DomPazz。我确实能够从SAS会话中运行命令行。您能否以不同方式触发此操作,始终写入相同的文件名,并在启动Access DB时运行脚本以自动更新文件/记录?这通常是我设置它的方式。可能,或者像Richard所描述的那样使用autoexec宏,但正如我在给Richard的评论中所指出的,它最多需要5分钟才能更新,也可以用作前端,以提取其他同事的报告,我不想降低它们的使用速度。听起来您已经达到了Access数据库的极限,需要一个实际的报告和数据库工具。
%Spit;
%sysexec msaccess /x ImportTablesMacro;