如何与关系数据库通信
 
 
如何与普通数据库通信
    紫金桥实时数据库系统可以与普通关系数据库(DBMS)通讯,将紫金桥实时数据库系统的实时数据或历史数据保存到关系数据库中;也可以将关系数据库中的数据导入到紫金桥实时数据库系统。有两种方法实现两者通信,一是通过ODBCGATE转储程序,该程序可以实现实时数据的周期性转储或历史数据到关系库的存储。另一方法是通过紫金桥系统提供的的SQL函数实现与关系库的通信。前者比较简单,后者比较灵活,但是实现比较复杂。
 
一. ODBCGATE转储数据
    ODBCGATE是紫金桥的实用程序之一,支持Microsoft的开放数据库互连(Open Database Connectivity-ODBC),能够访问其它支持ODBC接口的DBMS系统或数据文件,它可以实现以下几个功能:
将DB中的实时数据传送到DBMS中;或者将DBMS中的数据记录更新到DB中。
将DB中的历史数据转储到DBMS中去。
运行转储程序
  1) 启动菜单运行"紫金桥实时数据库系统/ODBCGATE"。
  2) 在本机设置中指定自动启动。执行文件位于安装目录,文件名为ODBCGATE.EXE。
 
历史转储
    ODBCGate的历史转储,可将DB中某段时间的历史数据一次性转储到DBMS中去。在ODBCGate中可以定义将DB中哪些点装载到DBMS中的哪个表中,同时还可以指定时间段和采样周期等。每个采样点的历史数据被转储到DBMS中多个记录中,表结构如下:
 
字段名
类型
长度
日期时间字符串长度的正确表示
日期型
 
点名
字符串
32
数值
字符串 
32
历史转储组态
 
  1.激活菜单“文件(F)/历史转储组态”,进入“历史数据转储组态”对话框
    对话框中的组态信息由三个属性页组成:“数据库”属性页、“时间”属性页以及“点定义”属性页。
 
 
“数据库”属性页
 
  单击标签名“数据库”切换到“数据库”属性页。
名称:历史数据转储名称,系统可以同时进行多个历史数据转储,每个转储都有一唯一的名称。
数据库名: 数据库连接描述信息,可以单击连接按钮,选择数据源,这时将出现如下对话框:
注意只有数据源名空时才出现该对话框。
   
选择要进行连接的数据源,单击“确定”按钮返回(连接ODBC接口程序的数据源在ODBC管理器中创建与配置,可以在“控制面板”程序组中启动ODBC管理器程序)。此时,如果连接成功,系统会自动将连接DBMS的连接命令加入到“数据库/名称”输入项内。

数据表名:此项用于指定DBMS中要创建的数据表的名称。在输入项“名称”内可直接输入数据表的名称。
 
  如果已经与DBMS正确建立连接,点击下拉按钮,列表框会列出DBMS中可访问的数据表名称。可以从中选择一个表名作为要进行转储的数据表,若想删除数据表,则单击“删除”按钮。

 
“时间”属性页
    单击标签名“时间”切换到“时间”属性页。
 
 
  在“时间”属性页中指定关于历史数据转储的各种时间参数。
 
  开始日期:用“年”、“月”、“日”表示。
 
  开始时间:用“时”、“分”、“秒”表示。
 
  时间长度:单位可以为:日、时或分。
 
  采样间隔:历史数据的采样周期。单位可以为:时、分或秒。

 
“点定义”属性页
 
 单击标签名“点定义”切换到“点定义”属性页。

在“点定义”属性页中指定DBMS数据表要记录的点。
 
名称:记录到数据库中的名称,一般与点名相同。
点名:实时数据库中的点名。
类型:数据类型。
长度:字符个数,只对字符串类型有效。
当指定了名称、数据类型、对应的DB点、参数名后,然后单击“增加”按钮。
 
    通过“增加”,“删除”,"修改"等按钮可以增加新的点,或修改删除已有的记录。
      单击“导出“可以将表格中内容导出导文本文件中。
      单击“导入“可以将文本文件中的内容导入到表格中。
      注: 文本文件为制表符格式,可以在Excel中编辑,然后导入。
 
    组态完毕后,单击“历史数据转储组态”对话框“确定”按钮。

 
执行历史转储
 
  当完成了历史转储组态后,激活菜单命令“文件(F)/开始历史转储”,开始历史转储过程。此时系统出现进度条以提示数据转储的过程。

浏览历史转储结果
 
  如果想查看DBMS中转储数据的结果,可以激活菜单命令“查看/浏览历史库”,ODBCGate自动显示查询到的DBMS数据记录)。
 
二、实时转储
 
  ODBCGate的实时转储完成DB与DBMS之间的实时数据转储。ODBCGate的实时数据转储功能用来建立紫金桥实时数据库DB与DBMS之间的实时数据连接。而且数据传送是双向的,不仅能够将DB的实时数据装载到DBMS中,还可以将DBMS中各字段的数值读入DB。
 
  实时转储可以同时建立与多个DBMS的多个数据表的实时连接。每个实时连接对一名称。ODBCGate通过名称来管理多个连接的多个任务,连接的数量不受限制。
 
  在利用ODBCGate进行实时转储时,要定义将DB中哪些点装载到哪个DBMS中的哪个表中。每个采样点的实时数据被装载到DBMS中后占据一个(更新方式)或多个记录。
 
 
    组态
 
  1. 激活菜单“文件(F)/实时数据转储组态”,进入“实时数据转储定义”对话框。
 
    在此对话框中,可以增加一个访问名、修改或删除一个已建访问名。ODBCGate通过访问名以区别连接不同的ODBC接口和不同的数据表,定义的访问名标识必须唯一。
 

对话框中“数据库”和“点定义” 属性页与历史转储相同,下面介绍一下“其它” 属性页。
数据流向:此选择项指定在系统运行时是由DB的数据实时更新到DBMS,还是由DBMS中的数据记录实时更新到DB的数据。
 
更新周期:用于指定当前访问名进行实时数据转储的执行周期。单位可以是日、时、分、秒。更新周期最快不能小于5秒。
修正时间:相对于零点偏置时间,该值必须小于更新周期。如周期为一天,修正时间为1小时。那么每日1时转储一次。如周期为1小时,修正时间为10分。那么每小时10分转储一次。
 
 
  如果在“数据流向”中选择“实时库到管理库”,那么ODBCGate更新DBMS中数据记录时将有两种方式:更新方式和插入方式。对于更新方式,对应一个DB点,ODBCGate仅在DBMS中维护一条记录,并周期性地更新这一记录的数据;对于插入方式,则没插入一次,增加一条记录,以“流水帐”方式记录DB中实时数据变化的过程。
 
 
  如果在“数据流向”中选择“管理库到实时库”,那么ODBCGate用DBMS数据记录更新DB数据仅有一种方式:更新方式。插入方式选择项将被禁止。此时,ODBCGate周期性地访问DBMS中数据记录,并用获取的数据记录更新DB中对应的点参数值。如果DBMS数据表中对应DB中某点参数的字段名数据记录不唯一,那么ODBCGate将不能保证用于更新的数据记录是想要更新的记录,因此, DBMS管理员在定义数据表字段属性时,最好将对应DB点参数的字段名定义为unique(记录唯一)属性,以防止产生错误数据。
如果在“存储方式”中选择了“插入方式”,则需要指定DBMS保存数据记录的时间长度。最短的时间为1天。比如,当指定了保存天数为10天时,ODBCGate将维护DBMS中数据表中的数据记录数不会超出10天内所能生成的记录数。
 
 
运行实时转储
 
  当完成了实时转储组态后,激活菜单命令“文件(F)/运行实时转储”,开始实时转储过程。
 
 
浏览实时转储结果
 
  若要查看DBMS中实时数据转储结果,可以激活菜单命令“查看/浏览实时库”,出现“选择访问名”对话框,在上面选择要查看的转储访问名,但击“确认”按钮。
系统参数
单击"文件/系统参数"菜单,出现如下对话框,在此指定是否使用多线程,每次运行时是否进行表结构检查,以及初始是否进入运行态等。
 
主机名
单击"文件/主机名"菜单,出现如下对话框,在此可以指定远程实时数据库名称。
二.SQL函数
    SQL(结构化查询语言)是关系数据库使用的用来检索、更新和管理数据标准语言。开放式数据库互连(ODBC)是Microsoft的标准API。RealInfo通过ODBC API访问SQL数据源,并为之封装了多种数据库访问函数即SQL函数,用户通过这些函数可以创建、删除数据表;向数据表中插入、更新记录、定位记录、读取记录内容,从而实现RealInfo与关系数据库间的双向传送。
1.与关系数据库建立连接
    要与关系数据库打交道,首先要调用函数SQLConnect与其建立连接。
SQLConnect( ConnectID, SourceDesc)
说明 

    与指定的数据库建立连接。如果指定的远程数据库不存在,该函数可能要等待几十秒。

参数 

    ConnectID 整型,数据源标识,为返回值,该值将用于其它后续SQL函数。 

    SourceDesc 字符串,数据源描述。数据源描述可以通过脚本中工具条 
    按钮“SQL连接“按钮得到。 

注意事项 

    数据源使用完后,使用SQLDisconnect来断开连接 。

示例 
SQLConnect(ConnectID,"DSN=abc;DBQ=D:\0\abc.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;");
 
2. 创建数据表
    创建数据表除了要定义表名称外,还要定义数据表的结构,即数据表有哪些字段,每一字段的数据类型,是否为关键字,数据长度等信息。字段的多少不定,这些信息内容较多,因此我们通过单独的配置程序定义,称之为“表模板”。
表模板定义
    在导航器中选择“画面/数据表管理/表模板”将出现如下所示对话框:
对话框各项说明:
名称
    输入表模板名称,名称可以是英文字母、“_",或数字的组合,也可以为汉字,但是不能为纯数字。最大长度为 32 个字符。
增加
    添加一行。 

删除
    删除表格模板中当前行。 

插入
    在当前行之上插入一行。

保存
    保存表格模板内容。
表格各列说明

字段名
    输入列名。字段名最多为 31 个字符。

类型
    选择数据类型。
索引
    选择索引类型。

    “唯一”,该列内每一值必须为唯一的。 

    “非唯一”,该列内的值不必是唯一的。 

    “无”,没有索引。 
允许空值

    选择是否允许有空值。
 
3. SQLCreateTable
建立好表模板后,通过函数SQLCreateTable建立数据表,该函数说明如下:
SQLCreateTable(ConnectID,TableName,TemplateName) 

说明 

    使用表模板在数据库中创建数据表 。

参数 

    ConnectID 数据源标识,由SQLConnect调用返回。 

    TableName 字符串类型,新建的数据表名称。 

    TemplateName字符串类型,使用的表模板名称。 

注意事项 

    数据表模板必须在SQL管理器中事先建立。表模板中字符串长度一定要合适。
示例 

    SQLCreateTable(ConnectID,"Mytab", "TMPL1");
 
4. 插入记录
    与数据库通信,最重要的事情就是向数据库中插入记录,插入记录就要指明记录中每个字段的值,值的来源是实时数据库,各字段的值是如何与数据库中的点或变量对应的呢,这是通过绑定表来定义的。绑定表规定了数据表中的字段与紫金桥的变量之间的对应关系,插入或更新记录时各字段将取对应的变量的当前值, 从关系数据库读取数据将更新对应的RealInfo变量的当前值,即其规定的是一种双向数据传送变量与字段间的对应关系。
绑定表定义
在导航器中选择“画面/数据表管理/绑定表”将出现如下所示对话框:
 
对话框各项说明:
名称
    输入绑定表名称,名称可以是英文字母、“_",或数字的组合,也可以为汉字,但是不能为纯数字。最大长度为 32 个字符。
增加
    添加一行。 

删除
    删除绑定表中当前行。 

插入
    在当前行之上插入一行。

保存
    保存绑定表内容。
表格各列说明
字段名
    输入列名。字段名最多为 31 个字符。

类型
    选择数据类型,一般要与表模板中定义相同。
变量名
    输入与该字段关联的变量名称。
 
5. SQLInsert函数
    向关系数据库插入数据,要调用函数SQLInsert,函数说明如下:
SQLInsert(ConnectID, TableName, BindName) 

说明 

    将绑定表中指定的变量的当前值插入到数据表中。 

参数 

    ConnectID 整型,数据源标识,由SQLConnect调用返回。 
    TableName 字符串类型,为数据库中数据表名称。 
    BindName  字符串类型,所使用的绑定表名称。 

注意事项 

    TableName 为数据库中数据表名称,而不是表模板名称。 

示例 

    SQLInsert(ConnectID,"Mytab", "BIND1");
 
    更新数据,可以调用函数SQLUpdate
 
6.查询
  通过SQLSelect函数可以对数据库内容进行查询,查询结果可以通过SQLDisplay显示,通过函数SQLStatistics可以对查询结果进统计。SQLFirst,SQLLast,SQLPrev, SQLMoveTo等用于移动光标位置。
SQLSelect(ConnectID,TableName, WhereExpr) 

说明 

    选择数据表中符合条件的记录,该函数返回一数据集。可以使用如下函数  SQLFirst(),SQLLast(),SQLNext(),SQLPrev()定位记录。 

参数 

    ConnectID 数据源标识,由SQLConnect调用返回。 

    TableName 字符串,数据表名称。 

    WhereExpr字符串,选择表达式,只有符合该条件的记录被选中。条件中可以指明按哪个字段排序,关键字为ORDER BY;以及升序还是降序,关键字为DESC/ASCE。

示例 

    SQLSelect(ConnectID,"Mytab","");
    选择所有记录。 

    SQLSelect (ConnectID,"Mytab","TEMP >=0 ORDER BY NAME DESC");
    只选择字段TEMP大于等于0的记录。 并按NAME降序排列。
SQLDisplay(RowCount) 

说明 
显示由SQLSelect()选择的数据集中的记录。
参数
RowCount每屏记录数。 
示例 
SQLDisplay(20); 

显示从当前光标位置以下20条记录。
7. 读取关系库数据
    通过SQL函数除了可以向关系库数据插入数据外,也可以从关系库数据中读取数据,函数SQLGet用于读取关系库数据的数据。该函数说明如下:
 
SQLGet(BindName )
说明
    从当前数据表中当前记录(当前光标位置)获取数据。当前记录行中各字段的值将赋给对应的紫金桥变量,字段与紫金桥变量的对应关系由绑定表BindTableName决定。如果当前记录集中有多条记录,检取的记录为当前记录,为了检取其他记录,可以通过SQLNext,SQLPrev重新定位当前记录,然后再调用SQLGet
参数
BindName字符串,使用的捆绑表名称。
注意:
调用该函数前,必须在前面调用过SQLSelect
示例
SQLSelect (ConnectID,"MyTab1","A = 50");
SQLFirst();
SQLGet("Bind1");
 
8. 查看调试信息
    通过SQLGetLastError(ErrorDesc)可以得到上次SQL语句的执行情况。参数ErrorDesc为错误描述信息,可以在画面中显示。此外通过SQL函数还可以删除数据表,删除记录,对数据库内容进行统计等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。