AIM-PIbd-32-Kurbanova-A-A/aimenv/Lib/site-packages/win32com/test/daodump.py
2024-10-02 22:15:59 +04:00

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()