62 lines
2 KiB
Python
62 lines
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()
|