91 lines
2.2 KiB
Python
91 lines
2.2 KiB
Python
# import dao3032
|
|
# No longer imported here - callers responsibility to load
|
|
#
|
|
import win32com.client
|
|
|
|
|
|
def DumpDB(db, bDeep=1):
|
|
# MUST be a DB object.
|
|
DumpTables(db, bDeep)
|
|
DumpRelations(db, bDeep)
|
|
DumpAllContainers(db, bDeep)
|
|
|
|
|
|
def DumpTables(db, bDeep=1):
|
|
for tab in db.TableDefs:
|
|
tab = db.TableDefs(tab.Name) # Redundant lookup for testing purposes.
|
|
print(
|
|
"Table %s - Fields: %d, Attributes:%d"
|
|
% (tab.Name, len(tab.Fields), tab.Attributes)
|
|
)
|
|
if bDeep:
|
|
DumpFields(tab.Fields)
|
|
|
|
|
|
def DumpFields(fields):
|
|
for field in fields:
|
|
print(
|
|
" %s, size=%d, reqd=%d, type=%d, defVal=%s"
|
|
% (
|
|
field.Name,
|
|
field.Size,
|
|
field.Required,
|
|
field.Type,
|
|
str(field.DefaultValue),
|
|
)
|
|
)
|
|
|
|
|
|
def DumpRelations(db, bDeep=1):
|
|
for relation in db.Relations:
|
|
print(
|
|
"Relation %s - %s->%s"
|
|
% (relation.Name, relation.Table, relation.ForeignTable)
|
|
)
|
|
|
|
|
|
#### This dont work. TLB says it is a Fields collection, but apparently not!
|
|
#### if bDeep: DumpFields(relation.Fields)
|
|
|
|
|
|
def DumpAllContainers(db, bDeep=1):
|
|
for cont in db.Containers:
|
|
print("Container %s - %d documents" % (cont.Name, len(cont.Documents)))
|
|
if bDeep:
|
|
DumpContainerDocuments(cont)
|
|
|
|
|
|
def DumpContainerDocuments(container):
|
|
for doc in container.Documents:
|
|
import time
|
|
|
|
timeStr = time.ctime(int(doc.LastUpdated))
|
|
print(" %s - updated %s (" % (doc.Name, timeStr), end=" ")
|
|
print(doc.LastUpdated, ")") # test the _print_ method?
|
|
|
|
|
|
def TestEngine(engine):
|
|
import sys
|
|
|
|
if len(sys.argv) > 1:
|
|
dbName = sys.argv[1]
|
|
else:
|
|
dbName = "e:\\temp\\TestPython.mdb"
|
|
db = engine.OpenDatabase(dbName)
|
|
DumpDB(db)
|
|
|
|
|
|
def test():
|
|
for progid in ("DAO.DBEngine.36", "DAO.DBEngine.35", "DAO.DBEngine.30"):
|
|
try:
|
|
ob = win32com.client.gencache.EnsureDispatch(progid)
|
|
except pythoncom.com_error:
|
|
print(progid, "does not seem to be installed")
|
|
else:
|
|
TestEngine(ob)
|
|
break
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test()
|