ihd OLEDB provider

Navigation:  功能明细 > 数据接口 >

ihd OLEDB provider

Previous pageReturn to chapter overviewNext page

1.概述

OLE DB是微软的开发的一种基于COM的数据库技术,它是通向不同的数据源的低级应用程序接口。OLE DB和其他 Microsoft 数据库技术的不同之处在于其提供通用数据访问的方式,不仅包括微软资助的标准数据接口、开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。

 

2.OLE DB基于COM标准

OlEDB是基于COM的一种技术,因此呈现程序语言的多样特性,可支持c++,vbscript等语言,因此可以将OLEDB技术用来在组态系统,从而访问实时数据库的数据。

 

3.安装

  一般客户端安装程序会自动注册 hdOLEDB.dll。

在注册表中查看dll是否被注册

(1)运行Win + R,在标签中输入regedit并确定打开注册编辑器;

(2)在HKEY_CLASSES_ROOT目录下,查找是否有”Ihd.ihd.1”存在,如果存在则说明注册成功。

如果没有自动注册成功,需要手工注册:

在hdOLEDB.dll目录下运行命令行

regsvr32 hdOLEDB.dll

 

4.连接准备

 OLEDB提供程序用于访问我们的实时数据库,因此用户在使用Oledb时应该保证实时数据库的服务已经启动,在系统管理工具中可以正常查询数据。

 

5.SQL语句使用说明

 OLEDB 提供程序的SQL语句,与ODBC驱动的SQL语句相同,详情请参考:ODBC Driver

 

6.Oledb提供接口说明

 Oledb支持直接传入SQL语句进行查询,直接提供字段,时间,表名,查询记录条数作为参数进行查询。在调用接口之前需要生成dll的一个对象实例,通过对象来调用相应的接口,具体操作如下:

(1)生成对象
IMyclass * pMyclass = NULL;

IHyperDB * pIHyperdb = NULL;

HRESULT hr = CoInitilize(NULL);

hr = CoCreateInstance(CLSID_MyClass, NULL, 1, IID_IMyClass, (void **) &pMyClass);

现在已经生成了一个对象,利用对象pMyClass进行接口访问。

(2)数据库连接接口

ConnectToDB(BSTR szIP, LONG nPort, BSTR szBakIP, LONG nBakPort, LONG Timeout, BSTR UserID, BSTR Passward, LONG *nRetErr)

本接口实现了数据库的连接与登录过程,因此数据库连接需要用户传入访问的数据库IP,PORT,以及登录所用的用户名和密码等信息进行数据库的访问。

(3)执行SQL语句
GetSQL(BSTR GetsqlPt, VARIANT *rows)
本接口通过传入一个Sql语句进行数据的查询,rows是查询事需要返回的数据记录条数

(4)获取结果集
GetRowSets(_RETURNRESULT** pRet,LONG* rows,LONG *nRetErr)
本接口将查询结果返回,pRet是要输出的结果集,一条记录用pRet的一行表示,rows是查询的数据记录条数,该接口可以直接将节点查询的所有字段结果输出,包含普通字段和内置函数字段。

(5)获取普通字段结果集
Get_CommonTag_Rowsets(VARIANT *retftag,VARIANT *retftime,VARIANT *retfquality, VARIANT * retfivalue,VARIANT *retffvalue, VARIANT * retfsvalue,VARIANT *retftagtype, VARIANT *retftimestep,VARIANT *retfintertype)
本接口将查询的字段如tagName,ftime等结果进行输出,注意该接口不返回具有内置函数的的字段

(6)获取内置函数字段结果集
Get_Buildin_Func_Rowsets(VARIANT *retMinfivalue, VARIANT *retMaxfivalue,VARIANT *retAveragefivalue,VARIANT * retCountfivalue, VARIANT * retSumfivalue, VARIANT *retMinffvalue, VARIANT *retMaxffvalue,VARIANT *retAverageffvalue,VARIANT * retCountffvalue, VARIANT * retSumffvalue)
本接口将支持内置函数的字段fivalue,ffvalue的相应结果输出,如最大、最小、平均、统计、求和,注意该接口只返回这两个字段的内置函数值

(7)断开数据库连接
Disconnect()
本接口断开数据库的连接,并进行连接句柄的释放,并且将查询结果的内存空间进行释放

 

7.  组态脚本示例

//链接与断开测试

Sub BSButton1_OnClick()

Set objArray= CreateObject("Ihd.ihd.1")

Dim ip,port,bakip,bakport,timeout,usid,pswd,ret

   ip= "127.0.0.1"

   port= 5673

   bakip = ""

   bakport = 5673

   timeout= 3

   usid = "admin"

   pswd = "admin"

   ret = CLng(objArray.ConnectToDB(ip,port,bakip,bakport,timeout,usid,pswd))

   MsgBox "连接状态:" &ret

   objArray.Disconnect

   Set objArray= nothing

End Sub

 

 

//SQL执行测试

Sub BSButton1_OnClick()

Set objArray= CreateObject("Ihd.ihd.1")

Dim ip,port,bakip,bakport,timeout,usid,pswd,ret

   ip= "127.0.0.1"

   port= 5673

   bakip = ""

   bakport = 5673

   timeout= 3

   usid = "admin"

   pswd = "admin"

   objArray.ConnectToDB ip,port,bakip,bakport,timeout,usid,pswd

   strsql = "select * from HDArch where FTAG= 'ddd' limit 5 "

   rows = 0

   nRetErr = CLng(objArray.GetSQL_B(strsql,rows))

   MsgBox "错误码是:" &nRetErr

   MsgBox " 行数: " &rows

   objArray.Disconnect

   Set objArray= nothing

End Sub

 

 

//测试普通点结果集 Get_CommonTag_Rowsets

Sub BSButton1_OnClick()

Set objArray= CreateObject("Ihd.ihd.1")

Dim ip,port,bakip,bakport,timeout,usid,pswd,ret

   ip= "127.0.0.1"

   port= 5673

   bakip = ""

   bakport = 5673

   timeout= 3

   usid = "admin"

   pswd = "admin"

   objArray.ConnectToDB ip,port,bakip,bakport,timeout,usid,pswd

   Dim retftag,retftime, retfquality,retfivalue, retffvalue,retfsvalue

   Dim retftagtype,etftimestep,retfintertype

   Dim Fields,rows,nTagName,nRetErr,strsql,shownum

 

   strsql = "select * from HDArch where FTAG= 'ddd' limit 5 "

   rows = 0

   nRetErr = CLng(objArray.GetSQL(strsql,rows))

   MsgBox "错误码是:" &nRetErr

   MsgBox " 行数: " &rows

   nRetErr = CLng(objArray.Get_CommonTag_Rowsets(retftag,rettime,retfquality,retfivalue,retffvalue,retfsalue,retftagtype,retftimestep,retintertype))

   MsgBox "Get_CommonTag_Rowsets 错误码是: " &nRetErr

   Dim x1,x2,showeftag

       showftag = "调用后ftag: "

       For x1= 0 to 2

       showftag = showftag & retftag(x1) &  ";  "

       next

       MsgBox showftag

   objArray.Disconnect

   Set objArray= nothing

End Sub

 

 

 

//测试内置函数结果集

Sub BSButton1_OnClick()

 

Set objArray= CreateObject("Ihd.ihd.1")

Dim ip,port,bakip,bakport,timeout,usid,pswd,ret

   ip= "127.0.0.1"

   port= 5673

   bakip = ""

   bakport = 5673

   timeout= 3

   usid = "admin"

   pswd = "admin"

 

   objArray.ConnectToDB ip,port,bakip,bakport,timeout,usid,pswd

   Dim retminfivalue,retmaxfivalue,retcountfivalue,retaveragefivalue,retsumfivalue

   Dim retminffvalue,retmaxffvalue,retcountffvalue,retaverageffvalue,retsumffvalue

   Dim Fields,rows,nTagName,nRetErr,strsql,shownum

 

   strsql = "Select max(fivalue),min(fivalue), count(fivalue) from hdarch where ftag='ddd' and ftime < '2018-08-03 08:00:00.000'"

   rows = 0

   nRetErr = CLng(objArray.GetSQL(strsql,rows))

   MsgBox "错误码是:" &nRetErr

   MsgBox " 行数: " &rows

   nRetErr = CLng(objArray.Get_Buildin_Func_Rowsets(retminfivalue,retmaxfivalue,retcountfivalue,retaveragefivalue,retsumfivalue,retminffvalue,retmaxffvalue,retcountffvalue,retaverageffvalue,retsumffvalue))

   MsgBox " 错误码是: " &nRetErr

   MsgBox "retminfivalue:" &retminfivalue

   MsgBox "retmaxfivalue:" &retmaxfivalue

   MsgBox "retaveragefivalue:" &retaveragefivalue

   MsgBox "retcountfivalue:" &retcountfivalue

   MsgBox "retsumfivalue:" &retsumfivalue

   objArray.Disconnect

   Set objArray= nothing

End Sub