|
本帖最后由 williamwangc 于 2012-5-16 19:38 编辑
经过努力,终于完成了楼主的问题。在这之中也碰到了不少问题,也有了一些想法,希望和版主及各位朋友探讨。好了废话少说,上代码和附件。- '首先引用Microsoft activeX data object 2.8 和 Microsoft Scripting Runtime
- '前面一个是引用ADODB.RECORDSET,后一个是引用FileSystemObject
- Dim fso As FileSystemObject
- Dim objectFolder As Folder
- Dim objectFile As File
- Dim rst As ADODB.Recordset
- Dim str_FolderPath As String
- Dim str_SQLDEL As String
- Dim str_EarlistCreated As String
- '找到所有文本所在文件夹
- str_FolderPath = CurrentProject.Path & "/测试文本"
- Set fso = New FileSystemObject
- Set objectFolder = fso.GetFolder(str_FolderPath)
- '删除[tbl_文件名和创建时间]表所有数据
- str_SQLDEL = "Delete * From [tbl_文件名和创建时间]"
- DoCmd.SetWarnings False
- DoCmd.RunSQL str_SQLDEL
- '用ADO连接[tbl_文件名和创建时间]
- Set rst = New ADODB.Recordset
- rst.Open "tbl_文件名和创建时间", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
- '利用FileSysytemObject中File的属性提取文件的文件名和文件创建时间,并加入[tbl_文件名和创建时间]表
- For Each objectFile In objectFolder.Files
- If objectFile.Name Like "*.docx" Then
- rst.AddNew
- rst!文件名 = objectFile.Name
- rst!创建时间 = objectFile.DateCreated
- rst.Update
- End If
- Next objectFile
- rst.Close
- '我不太懂锁定记录的原理是什么,不过如果以adOpenDynamic, adLockOptimistic这样的参数打开recordset,那么recordset.recordcount=-1
- rst.Open "tbl_文件名和创建时间", CurrentProject.Connection, adOpenStatic, adLockPessimistic
- '当记录数量>5就循环下面的操作
- Do While rst.RecordCount > 5
- rst.MoveFirst
- '循环操作开始地方:找到建立时间的最小值,即最早建立的时间
- str_EarlistCreated = DMin("创建时间", "tbl_文件名和创建时间")
- '在记录中找到最早建立的文件所在的记录
- Debug.Print str_EarlistCreated
- rst.Find "创建时间='" & str_EarlistCreated & "'"
- '删除这个文件
- Kill str_FolderPath & "" & rst!文件名
- '在表里面删除这条记录
- rst.Delete
- '回到第一条记录
- rst.MoveFirst
- Loop
- '数据集关闭
- rst.Close
- End Sub
复制代码 ps.方法比较菜鸟,不够简便,楼主只要稍作改动就可使用,不过由于filesysyemobject的关系,只有2007可用。
40行可删除,重复了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|