2004年01月15日 星期四 14:29
我参考
>>> import win32com.client
>>> conn =
win32com.client.Dispatch(r'ADODB.Connection')
>>> DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
SOURCE=C:/MyDB.mdb;'
>>> conn.Open(DSN)
经过上面的设置之后,就可以直接连接数据库了:
首要的任务是打开一个数据集/数据表
>>> rs = win32com.client.Dispatch(r'ADODB.Recordset')
>>> rs_name = 'MyRecordset'
>>> rs.Open('[' + rs_name + ']', conn, 1, 3)
[1和3是常数.代表adOpenKeyset
和adLockOptimistic.我用它作为默认值,如果你的情况不同的话,或许你应该改变一下.进一步的话题请参考ADO相关材料.]
打开数据表后,你可以检查域名和字段名等等
>>> flds_dict = {}
>>> for x in range(rs.Fields.Count):
... flds_dict[x] = rs.Fields.Item(x).Name
字段类型和长度被这样返回A :
>>> print rs.Fields.Item(1).Type
202 # 202 is a text field
>>> print rs.Fields.Item(1).DefinedSize
50 # 50 Characters
现在开始对数据集进行操作.可以使用SQL语句INSERT
INTO或者AddNew() 和Update()
>>> rs.AddNew()
>>> rs.Fields.Item(1).Value = 'data'
>>> rs.Update()
这些值也能够被返回:
>>> x = rs.Fields.Item(1).Value
>>> print x
'data'
因此如果你想增加一条新的记录,不必查看数据库就知道什么number
和AutoNumber 字段已经产生了
>>> rs.AddNew()
>>> x = rs.Fields.Item('Auto_Number_Field_Name').Value
# x contains the AutoNumber
>>> rs.Fields.Item('Field_Name').Value = 'data'
>>> rs.Update()
使用ADO,你也能得到数据库里面所有表名的列表:
>>> oCat =
win32com.client.Dispatch(r'ADOX.Catalog')
>>> oCat.ActiveConnection = conn
>>> oTab = oCat.Tables
>>> for x in oTab:
... if x.Type == 'TABLE':
... print x.Name
关闭连接. 注意这里C是大写,然而关闭文件连接是小写的c.
>>> conn.Close()
------------------------------------------
以上内容没有成功的连接我的mdb 文件。
而我编辑成.py 文件后也没有成功。代码如下:
---------------------------------
import win32com.client
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
SOURCE=C:/MyDB.mdb;'
conn.Open(DSN)
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'MyRecordset'#不知道这是表名,还是字段名,
rs.Open('[' + rs_name + ']', conn, 1,
3)#这里的1和3到底表示什么意思啊。
flds_dict = {}
for x in range(rs.Fields.Count):
flds_dict[x] = rs.Fields.Item(x).Name
#字段类型和长度被这样返回
#print rs.Fields.Item(1).Type
#print rs.Fields.Item(1).DefinedSize
x = rs.Fields.Item(1).Value
print x
conn.Close()
---------------------
上面就是我找到的代码,不明白问题出在那里。:
Traceback (most recent call last):
File
"D:\PYTHON23\lib\site-packages\Pythonwin\pywin\framework\scriptutils.py",
line 310, in RunScript
exec codeObject in __main__.__dict__
File "D:\Python23\src\data1.py", line 24, in ?
print x
File
"D:\PYTHON23\lib\site-packages\Pythonwin\pywin\framework\winout.py",
line 172, in write
return self.template.write(msg)
File
"D:\PYTHON23\lib\site-packages\Pythonwin\pywin\framework\winout.py",
line 487, in write
self.HandleOutput(message)
File
"D:\PYTHON23\lib\site-packages\Pythonwin\pywin\framework\winout.py",
line 468, in HandleOutput
self.QueueFlush()
File
"D:\PYTHON23\lib\site-packages\Pythonwin\pywin\framework\winout.py",
line 444, in QueueFlush
item = str(item)
UnicodeEncodeError: 'ascii' codec can't encode
characters in position 0-5: ordinal not in range(128)
_________________________________________________________
Do You Yahoo!?
繁华世界里,让我看清你
http://cn.rd.yahoo.com/mail_cn/tag/?http://cn.surveys.yahoo.com/cn_user_profile_study_dec2003
Zeuux © 2025
京ICP备05028076号