MS ACCESS数据库实现自动压缩方式(IFIX)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MS Access数据库实现自动压缩方式
MS Access数据库在一般情况下,其所占空间将随着数据量的增多而增大,即使在程序中利用SQL语句根据条件删除记录,数据库的大小也不能自动减小(因为删除操作在物理上是没有把数据记录删掉,因此数据库大小将不会减小)。本方式是实现Access数据库的自动压缩,实现平台是iFIX组态软件中实现的。
因为Access是iFIX的ODBC报警记录的存储体,在iFIX运行期间,数据库是按独占方式访问的,程序中将无法利用Access设置的“修复和压缩数据库”功能。本方式实现的思路是:首先设置ODBC报警数据库(Access)为“关闭时压缩”选项,然后在程序中把ODBC报警数据库(Access)复制到另一目录,再利用语句把数据库打开,待设定的时间到达后(例如五秒钟)就关闭ODBC报警数据库(Access),最后再把ODBC报警数据库(Access)复制到原来的目录,替换原来的数据库文件。
约定:
ODBC报警数据库(Access)文件及存放目录是"C:\Dynamics\MXLAlarm\S123.mdb";
ODBC报警数据库(Access)文件临时存放目录是:"C:\Dynamics\MXLAlarm\Back\";
Access运行程序及存放目录为:"C:\Program Files\Microsoft Office\OFFICE11\ MSACCESS.EXE"。
下边是实现步骤及图解:
[1]对ODBC报警数据库(Access)文件S123.mdb进行设置。
打开数据库文件,单击“工具”—“宏”—“安全性”选项,在“安全级”选项卡内选择“地”,如下图所示;
单击“工具”—“选项”,在“常规”选项卡内选上“关闭时压缩”选项。如下如所示;
[2]iIFX中添加代码。
在VB脚本编辑环境内,在菜单栏上选择“工具”—“引用”,在对话框内添加对“Microsoft Scripting Runtime”的引用,这是为了在程序中可对文件进行操作;
在脚本最顶端添加两个API函数,用来在程序中实现对Windows窗口的操作,添加的函数为(可以直接复制粘贴):
Private Declare Function FindWindow Lib"user32"Alias"FindWindowA"(ByVal lpClassName As String,ByVal lpWindowName As String)As Long
Private Declare Function SendMessage&Lib"user32"Alias"SendMessageA"(ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,ByVal lParam As Any)编写操作代码:
'代码及说明
Dim hw&,cnt&'存放Windows句柄
'============================================================
Dim srcfile As String'存放数据库原文件
Dim desfile As String'存放数据库临时文件
srcfile="C:\Dynamics\MXLAlarm\S123.mdb"'设置数据库原文件目录文件地址
Dim Fso As New FileSystemObject'创建FSO对象实例
Dim filepath As String
'设置数据库临时文件目录文件地址
desfile="C:\Dynamics\MXLAlarm\Back\S123.mdb"
'将数据库原文件拷贝至临时文件目录,若存在同名文件则覆盖
Fso.CopyFile srcfile,desfile,True
'==============================================================
'利用Shell命令把临时数据库文件打开
Shell"C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE C:\Dynamics\MXLAlarm\Back\S123.mdb",vbMinimizedNoFocus
'设定时间间隔
start=Timer
'时间间隔摄动为5S
Do While Timer DoEvents Loop '5秒时间到达后,关闭数据库临时文件 hw&=FindWindow(vbNullString,"Microsoft Access")'查找Microsoft Access窗体'hw&不为零则表示找到要关闭的窗体,并发送消息,关闭窗体 If hw&<>0Then cnt&=SendMessage(hw&,&H10,0,0&)'关闭窗体 End If '将临时文件复制到原文件目录,并覆盖原文件 Fso.CopyFile desfile,srcfile,True '程序结束 [3]在iFIX实现Access数据库的自动压缩,可以利用调度来实现。只需设定触发时间,利用SQL语句操作数据库删除过期数据记录后,就可调用这段代码实现数据库的自动压缩,防止Access数据库无限增大。 Dim conn As New ADODB.Connection conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\MyAlarmRPT.mdb;User Id=;Password=;" conn.Open Dim sql As String sql="DELETE FROM FIXALARMS" conn.Execute sql,,adExecuteNoRecords Set conn=Nothing