【发布时间】:2018-05-23 10:12:35
【问题描述】:
我是新手,所以请温柔:)
我的问题是:我能否让 SAS(带有 PC 文件服务器的 9.4)触发 MS ACCESS 中的一个函数,该函数导入 SAS 之前吐出的 .txt 文件?
背景:我继承了一个 Access 数据库(.accdb,使用 2010 版),其源数据来自 SAS。当前的方法是 SAS 吐出 .txt 文件,我(半手动)将其导入数据库。半手动,因为有一个按钮/宏可以导入文件,但我必须打开数据库并按下按钮。我宁愿完全不必干预。
我尝试通过使用 PROC EXPORT(和 PC 文件服务器)和后来的 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
如果“YES”激活此代码(这是我希望直接触发的功能):
Function ImportTables()
Dim db As Database
Dim ITables As Recordset
Set db = CurrentDb
Set ITables = db.OpenRecordset("Tables", dbOpenDynaset)
Do Until ITables.EOF
Call ImportData(ITables![TableName], _
ITables![SpecificationName], _
ITables![FileName], _
ITables![DeleteExisting], _
ITables![Use])
ITables.MoveNext
Loop
ITables.Close
End Function
【问题讨论】:
-
您能否以不同的方式触发此操作,始终写入相同的文件名并在启动 Access DB 时运行脚本以自动更新文件/记录?我通常是这样设置的。
-
可能,或者使用 Richard 描述的 autoexec 宏,但正如我在对 Richard 的评论中所指出的,更新可能需要 5 分钟,并且它也被用作前端来提取报告其他同事,我不希望减慢他们的使用速度。
-
听起来您已经达到了 Access DB 的极限,需要一个实际的报告和数据库工具。