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