Python论坛  - 讨论区

标题:[python-chinese] ¹ØÓÚÁ¬½Óaccess Êý¾Ý¿âµÄÎÊÌâ

2004年01月15日 星期四 14:29

wide 288 wide288 at yahoo.com.cn
Thu Jan 15 14:29:35 HKT 2004

我参考
>>> 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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号