遇到一個task, 要把.mbd格式的數據庫導出。惋惜個人機器沒有比較熟悉的VC. 想down vs6也沒有合適的, .net又太大. 忽然想到前些日子裝了python, 卻一直沒用過,
python的粉絲處處散佈"用我python, 無所不能"的傳言, 何不拿它來試試看?
首先,baidu一下"python 訪問access" 結果還很多. 通過嘗試,以爲下面的方法最簡單.
#-*- coding: utf-8 -*-
import sys
import os
import win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=d:\\db1.mdb;'
conn.Open(DSN)
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'table1'
rs.Open('[' + rs_name + ']', conn, 1,2) #此函數中參數1,2 是什麼值怎麼設,我還不知道,還在試。
a=0
while a < rs.RecordCount :
if a % 5000 == 0 :
dir_no = a / 5000
dirpath = "d:\\tmp%d" % (dir_no)
os.mkdir(dirpath)
fname = "%s\\rec%d" % (dirpath, a)
title = rs.Fields.Item(1).Value
str1 = "<html><head><title>%s</title></head><body>\n" % (title)
output=open(fname, 'wb')
output.write(str1.encode('utf-8'))
output.close()
if a % 1000 == 0 :
print "%d\n" % a
#print "%d %d\t%s" % (a,num,title)
rs.MoveNext();
a = a+1
conn.Close();
須要注意的問題是: 輸出中文到文件必定要用.encode('utf-8')把它轉化成utf-8, 由於: 系統缺省的編碼是ascii, 遇到漢字會出錯. .encode('gbk')對於某些字符也會出錯.