# -*- coding: utf-8 -*-
importwin32com.client
mdb_path=r"C:\FARPS\data\set.mdb"
# 尝试不同的 OLEDB Provider
providers= [
"Microsoft.ACE.OLEDB.12.0",
"Microsoft.Jet.OLEDB.4.0",
]
conn=None
forproviderinproviders:
try:
conn=win32com.client.Dispatch("ADODB.Connection")
conn.Open(f"Provider={provider};Data Source={mdb_path}")
print(f"使用 Provider: {provider}")
break
exceptExceptionase:
print(f"Provider {provider} 失败: {e}")
conn=None
ifconnisNone:
print("所有 Provider 都失败了,尝试用 Access 应用程序直接执行...")
# 用 Access 应用程序对象直接执行
access=win32com.client.Dispatch("Access.Application")
access.OpenCurrentDatabase(mdb_path)
# 如果表已存在则先删除
try:
access.CurrentProject.Connection.Execute("DROP TABLE [工程类别]")
print("已删除旧表")
except:
pass
# 创建表
access.CurrentProject.Connection.Execute("""
CREATE TABLE [工程类别] (
[大类代码] TEXT(2),
[大类名称] TEXT(100)
)
""")
print("表已创建")
# 插入数据
data= [
('1', '天然林资源保护工程'),
('2', '三北及长江流域等重点防护林体系建设工程'),
('3', '退耕还林工程'),
('4', '京津风沙源治理工程'),
('5', '全国石漠化治理工程'),
('6', '野生动植物保护及自然保护区建设工程'),
('7', '速生丰产林基地建设工程'),
('8', '全国湿地保护工程'),
('9', '重点公益林经营工程'),
('10', '其他林业工程'),
]
forcode, nameindata:
sql=f"INSERT INTO [工程类别] ([大类代码], [大类名称]) VALUES ('{code}', '{name}')"
access.CurrentProject.Connection.Execute(sql)
print(f" 插入: {code} - {name}")
access.CloseCurrentDatabase()
access.Quit()
print("\n完成!")
else:
# 如果表已存在则先删除
try:
conn.Execute("DROP TABLE [工程类别]")
print("已删除旧表")
except:
pass
# 创建表
conn.Execute("""
CREATE TABLE [工程类别] (
[大类代码] TEXT(2),
[大类名称] TEXT(100)
)
""")
print("表已创建")
# 插入数据
data= [
('1', '天然林资源保护工程'),
('2', '三北及长江流域等重点防护林体系建设工程'),
('3', '退耕还林工程'),
('4', '京津风沙源治理工程'),
('5', '全国石漠化治理工程'),
('6', '野生动植物保护及自然保护区建设工程'),
('7', '速生丰产林基地建设工程'),
('8', '全国湿地保护工程'),
('9', '重点公益林经营工程'),
('10', '其他林业工程'),
]
forcode, nameindata:
sql=f"INSERT INTO [工程类别] ([大类代码], [大类名称]) VALUES ('{code}', '{name}')"
conn.Execute(sql)
print(f" 插入: {code} - {name}")
conn.Close()
print("\n完成!")