python 操作access, 使用win32com 库.
如果你的python 版本是2.3或者以下版本需要到http://cjkpython.i18n.org/下载中文支持包.
本程序是一个简单的查询表中全部数据的demo, 包括unicode -> gb2312 的转化,
具体的细节请阅读全文...
# -*- coding: gb2312 -*-
FileInfo = """\
#====================================================================
#========Project: --
#========Module: A ADO Demo
#========Author: junsi
#========Email : smppms2002@yahoo.com.cn or opindd@hotmail.com
#========Create Date: 2005.02.28
#========Update Date: 2005-04-18 add sql
#====================================================================
"""
import cjkcodecs.aliases
import win32api
import win32com.client
import string
def EncodeVlue( AStr ):
if isinstance(AStr, unicode):
return AStr.encode("gb2312")
else:
return AStr
def AdoDemo():
try:
conn = win32com.client.Dispatch("ADODB.Connection")
dsn ="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=score.mdb;"
conn.Open(dsn)
if conn.State == 1:
print "We've connected to the database."
else:
print "We failed to connect to the database."
rs = win32com.client.Dispatch("ADODB.Recordset")
rs.ActiveConnection = conn
rs.Open( "score" )
if rs:
print "Query Data Success"
else:
print "Query Data Failure"
#if don't use EncodeVlue error: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
while not rs.EOF:
for x in range(rs.Fields.count):
print EncodeVlue( rs.Fields.Item(x).Value )
rs.MoveNext()
finally:
print "DataBase Error = ", win32api.GetLastError()
conn = None
rs = None
if __name__ == "__main__":
AdoDemo()
print "Demo End"
"""
table socre sql
drop table score ;
create table score
(
zkz text ,
sfz text ,
mz text ,
sx text ,
yy text ,
zz text
);
create index ix_score on score( zkz,sfz ) with primary ;
"""