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 © 2024
京ICP备05028076号