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