Vba 从一批MS Access数据库读取表元数据
我在一个目录中有70多个Access数据库。我认为其中一些是同一目录中其他数据库的分支。检测它们的一种方法是检查表的创建时间,但这种方法需要逐个打开文件和表并记录创建时间Vba 从一批MS Access数据库读取表元数据,vba,ms-access,Vba,Ms Access,我在一个目录中有70多个Access数据库。我认为其中一些是同一目录中其他数据库的分支。检测它们的一种方法是检查表的创建时间,但这种方法需要逐个打开文件和表并记录创建时间 有没有一种简单的方法来实现自动化?有没有办法读取一批Access文件表的创建时间?使用以下代码从目录中获取文件名和文件的创建日期。这将在excel工作表中显示结果,如列文件名和列B创建日期 Sub LoopThroughFiles() Dim strDir As String Dim StrFile As S
有没有一种简单的方法来实现自动化?有没有办法读取一批Access文件表的创建时间?使用以下代码从目录中获取文件名和文件的创建日期。这将在excel工作表中显示结果,如列
文件名
和列B创建日期
Sub LoopThroughFiles()
Dim strDir As String
Dim StrFile As String
Dim i As Long
strDir = "D:\TEMP\"
i = 1
StrFile = Dir(strDir)
Do While Len(StrFile) > 0
Cells(i, 1) = StrFile
Cells(i, 2) = myMetaData(strDir & StrFile)
StrFile = Dir
i = i + 1
Loop
End Sub
Function myMetaData(CheckingFile As String)
Dim fs As Object, f As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(CheckingFile)
myMetaData = f.DateCreated
End Function
您可以使用DAO在数据库中循环tableDef,并获取此信息。下面的内容应该可以帮助您开始:
Sub sCheckAll(strPath As String)
On Error GoTo E_Handle
Dim strFile As String
strFile = Dir(strPath)
Do
If (Right(strFile, 3) = "mdb") Or (Right(strFile, 5) = "accdb") Then
Call sTableDefCreateTime(strPath & strFile)
End If
strFile = Dir
Loop Until strFile = ""
sExit:
On Error Resume Next
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "sCheckAll", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
Sub sTableDefCreateTime(strDBPath As String)
On Error GoTo E_Handle
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = DBEngine(0).OpenDatabase(strDBPath)
For Each tdf In db.TableDefs
If Left(tdf.name, 4) <> "MSys" Then ' exclude system tables
Debug.Print tdf.name & vbTab & tdf.DateCreated & vbTab & tdf.Connect
End If
Next tdf
sExit:
On Error Resume Next
db.Close
Set db = Nothing
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "sTableDefCreateTime", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
子sCheckAll(strPath作为字符串)
错误转到E_句柄
作为字符串的Dim strFile
strFile=Dir(strPath)
做
如果(右(strFile,3)=“mdb”)或(右(strFile,5)=“accdb”),则
调用sTableDefCreateTime(strPath和strFile)
如果结束
strFile=Dir
循环直到strFile=“”
性别:
出错时继续下一步
出口接头
E_手柄:
MsgBox错误描述&vbCrLf&vbCrLf&“sCheckAll”,vbOKOnly+vbCritical,“错误:”&错误编号
恢复性生活
端接头
子sTableDefCreateTime(strDBPath作为字符串)
错误转到E_句柄
Dim数据库作为DAO.Database
将tdf调暗为DAO.TableDef
Set db=DBEngine(0).OpenDatabase(strDBPath)
对于以db.TableDefs为单位的每个tdf
如果左(tdf.name,4)“MSys”,则“排除系统表”
Debug.Print tdf.name&vbTab&tdf.DateCreated&vbTab&tdf.Connect
如果结束
下一个tdf
性别:
出错时继续下一步
db.关闭
Set db=Nothing
出口接头
E_手柄:
MsgBox错误描述&vbCrLf&vbCrLf&“sTableDefCreateTime”,vbOKOnly+vbCritical,“错误:”&错误编号
恢复性生活
端接头
它还获取连接字符串,因为某些表可能是链接的
尊敬,我10天前在superuser.stackexchange上问了同样的问题。因为我没有得到答案,所以我在这里尝试。是的,有办法。那么你想把结果显示在哪里?任何地方。我只想自己用。在文本文件中,一个Access表或只是在屏幕上就可以了。请尝试我的答案。这只提供数据库本身的信息,而不是数据库中的表。感谢您的回答,但如果我理解得很好,代码会获取文件的创建日期,而我需要这些文件中表的创建日期。在MS Access中,您可以通过查看每个表的属性手动获取其创建数据。我只想查看同一目录中所有数据库中所有表的创建日期。