用Python 点击开始按钮 打开窗口选择多个MDB数据点击确定合并成一个新的MDB数据库并输入新文件名另存的程序
这是一个Python Tkinter GUI程序,它可以选择多个*.MDB文件并将它们合并成一个新的MDB数据库。
import tkinter as tk
from tkinter import filedialog
import os
import shutil
import win32com.client
class MDBMerger:
def __init__(self, master):
self.master = master
self.master.title("MDB Merger")
self.master.geometry("400x200")
self.master.resizable(False, False)
self.mdb_files = []
self.output_file = ""
# Create widgets
self.label = tk.Label(master, text="Select MDB files to merge:")
self.label.pack(pady=10)
self.button = tk.Button(master, text="Select Files", command=self.select_files)
self.button.pack()
self.merge_button = tk.Button(master, text="Merge", command=self.merge_files, state=tk.DISABLED)
self.merge_button.pack(pady=10)
self.save_label = tk.Label(master, text="Enter output file name:")
self.save_label.pack()
self.save_entry = tk.Entry(master)
self.save_entry.pack()
self.save_button = tk.Button(master, text="Save As", command=self.save_file, state=tk.DISABLED)
self.save_button.pack(pady=10)
def select_files(self):
self.mdb_files = filedialog.askopenfilenames(filetypes=[("MDB Files", "*.mdb")])
if self.mdb_files:
self.merge_button.config(state=tk.NORMAL)
def merge_files(self):
if not self.mdb_files:
return
# Create temporary folder to hold the MDB files
temp_folder = os.path.join(os.getcwd(), "temp")
os.makedirs(temp_folder, exist_ok=True)
# Copy MDB files to temporary folder
for file in self.mdb_files:
shutil.copy2(file, temp_folder)
# Create Access Application object
access = win32com.client.Dispatch("Access.Application")
# Open temporary database
db = access.DBEngine.OpenDatabase(os.path.join(temp_folder, os.path.basename(self.mdb_files[0])))
# Loop through remaining databases and append them to the first one
for file in self.mdb_files[1:]:
access.DBEngine.CompactDatabase(db, os.path.join(temp_folder, os.path.basename(file)))
# Close temporary database
db.Close()
# Save merged database to output file
self.output_file = self.save_entry.get()
access.DBEngine.CompactDatabase(os.path.join(temp_folder, os.path.basename(self.mdb_files[0])),
self.output_file)
# Delete temporary folder and files
shutil.rmtree(temp_folder)
# Enable save button
self.save_button.config(state=tk.NORMAL)
def save_file(self):
if not self.output_file:
return
# Copy output file to selected location
save_file = filedialog.asksaveasfilename(defaultextension=".mdb", filetypes=[("MDB Files", "*.mdb")],
initialfile=self.output_file)
if save_file:
shutil.copy2(self.output_file, save_file)
# Reset program
self.mdb_files = []
self.output_file = ""
self.merge_button.config(state=tk.DISABLED)
self.save_button.config(state=tk.DISABLED)
self.save_entry.delete(0, tk.END)
if __name__ == "__main__":
root = tk.Tk()
mdb_merger = MDBMerger(root)
root.mainloop()
该程序使用了以下库:
- tkinter:用于创建GUI界面
- filedialog:用于选择文件和保存文件
- os:用于操作文件和文件夹
- shutil:用于复制和删除文件和文件夹
- win32com:用于创建Access应用程序对象并合并MDB文件
程序的主要逻辑如下:
- 创建GUI界面和相关的窗口部件
- 选择MDB文件并将它们复制到临时文件夹中
- 创建Access应用程序对象并打开第一个MDB文件
- 循环遍历其余MDB文件,并将它们附加到第一个文件中
- 关闭临时数据库并将其保存为新文件
- 将新文件复制到用户选择的位置
- 删除临时文件夹和文件
- 重置程序状态
这个程序可以处理大量的MDB文件,并将它们合并成一个新文件。它使用Access应用程序对象来访问和修改MDB文件,因此需要安装Microsoft Access程序
原文地址: https://www.cveoy.top/t/topic/cjsn 著作权归作者所有。请勿转载和采集!