设为首页 收藏本站
查看: 1009|回复: 0

[经验分享] Python使用Com组件及Access查询分析类实现

[复制链接]

尚未签到

发表于 2017-5-5 09:45:04 | 显示全部楼层 |阅读模式
  auther:zfive5(zhaozidong)
email :zfive5@yahoo.com.cn
datetime: 2004-12-10 02:20:00

本来现在睡了,但由于牙疼的厉害难以入睡,只好打开机器写点东西,那就边学边研究python下的
com组件的使用!
首先,用vc编写一个简单的com组件,
  VC IDL和类定义:
  #pragma once
#include "resource.h" // 主符号
  
// IIzfive5
[
object,
uuid("808D04AA-C847-46A6-AA70-8D23FE1A7997"),
dual,helpstring("IIzfive5 接口"),
pointer_default(unique)
]
__interface IIzfive5 : IDispatch
{
  [id(1), helpstring("方法Add")] HRESULT Add([in] LONG a1, [in] LONG a2, [out,retval] LONG* ret);
};
  // CIzfive5
  [
coclass,
threading("apartment"),
vi_progid("ZFive5.Izfive5"),
progid("ZFive5.Izfive5.1"),
version(1.0),
uuid("E219A9E8-1EBB-4E24-808F-561F373AF8BE"),
helpstring("Izfive5 Class")
]
class ATL_NO_VTABLE CIzfive5 :
public IIzfive5
{
public:
CIzfive5()
{
}
  
DECLARE_PROTECT_FINAL_CONSTRUCT()
  HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}
  public:
STDMETHOD(Add)(LONG a1, LONG a2, LONG* ret);
};
  
其它的vc代码就不写了,主要简单的完成加法功能 !
  
Pyhton在使用com的时候首先的安装win32all.exe(python的window extend lib)
  这就是我python 窗口键入的代码
  PythonWin 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32.
Portions Copyright 1994-2001 Mark Hammond (mhammond@skippinet.com.au) - see 'Help/About PythonWin' for further copyright information.
>>> import win32com.client from *
>>> zfive5=
>>> import win32com.client from *
Traceback ( File "<interactive input>", line 1
import win32com.client from *
^
SyntaxError: invalid syntax
>>> from win32com.cli
Traceback ( File "<interactive input>", line 1
from win32com.cli
^
SyntaxError: invalid synta
>>> from win32com.client import *
>>> zfive5=Dispatch("ZFive5.Izfive5")
>>> zfive5.add(1,2)
3
>>>
  一直以来在想access为什么不提供类似sqlserver的查询分析器的界面,这样一来
可以对自己写的sql进行验证,有利于提高编程效率,毕竟我们大部分如果操作都
是通过sql语句来实现的。
  现在写一个python下的 access操作类,实现类似查询分析器功能,代码如下:
  #author:zfive5(zhaozidong)
#email: zfive5@yahoo.com.cn
  from win32com.client import *
class myaccess:
  def __init__(self,str_dbpath,str_name="",str_pw=""):
self.str_dbpath=str_dbpath
self.str_name=str_name
self.str_pw=str_pw
self.strdb=str="Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=%s;"%(str_dbpath)

def open(self):
self.conn=Dispatch("adodb.connection")
self.conn.Open(self.strdb,self.str_name,self.str_pw)

def execute(self,sql):
i=0
flag=0
(rs,result)=self.conn.Execute(sql,i,-1)
while(rs<>None and rs.State==1 and (not rs.EOF)):
n_fld=rs.Fields.count
n_fld1=0
"""
if flag==0:
str_headline='|'
while(n_fld1<n_fld):
str_headline+=(rs.Fields.get_Item(n_fld1)).Name
str_headline+='|'
n_fld1+=1
print str_headline
flag=1
"""
str_value="|"
n_fld1=0
while(n_fld1<n_fld):
str_value+=str(rs.Fields.Item(n_fld1).Value)
str_value+='|'
n_fld1+=1
print str_value
rs.MoveNext()
if (rs<>None):
rs=None


def close(self):
if(self.conn!=None):
self.conn.Close()

这个类还有待完善!
  Python 美丽的大蟒!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373283-1-1.html 上篇帖子: 用 Python 的 Descriptor 特性解决一个变态的问题 下篇帖子: python的闭包(3.0之前及之后)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表