dataapi接口使用指南

dataapi接口使用指南
dataapi接口使用指南

目录

1 DATAAPI接口概述 (1)

2 DATAAPI接口技术说明 (1)

3 DATAAPI接口安装 (2)

4 DATAAPI接口函数详述 (2)

4.1C ONNECT (2)

4.2D ISCONNECT (4)

4.3D A TA Q UERY (4)

4.4D A TA C OUNT (8)

4.5D A TA A PPEND (9)

4.6D A TA U PDATE (12)

4.7D A TA D ELETE (13)

4.8I NFO Q UERY (14)

4.9I NFO U PDATE (16)

4.10G ET RTL OG (17)

5 附录 (20)

5.1附录1:接口文件的详细说明 (20)

5.2附录2:DEMO演示程序的安装、使用指南 (21)

5.3附录3:DA TAAPI接口函数出错说明一览 (23)

5.4附录4:DA TAAPI接口使用的数据表示、表、字段等一览 (24)

6 FAQ (32)

6.1编译VC下的D EMO及RT IME程序时,出现:“FA TAL ERROR C1083:C ANNOT OPEN INCLUDE

FILE:'VLD.H':N O SUCH FILE OR DIRECTORY”连接错误: (32)

6.2编译J A VE D EMO下的COMMPROJA V A(VC DLL)工程时出现:“FA TAL ERROR C1083:C ANNOT

OPEN INCLUDE FILE:'JNI.H':N O SUCH FILE OR DIRECTORY”连接错误: (32)

6.3使用彩屏机对一个用户表查询时:D A TA Q UERY(H,(CHAR *)BUF O UT,2*1024*1024,

“U SER I NFO”,“*”,“PIN>6666”,“”),过滤条件为:“PIN>6666”,即准备查询考勤号大于6666的人员,为何下列记录会返回? (32)

6.4当使用GPRS、串口连接时,A PPEND很多指纹数据时非常慢,如何解决? (33)

6.5使用RS232、RS485、UDP连接失败? (33)

6.6使用RS232、RS485、UDP连接查询、追加操作时,经常返回-902错误? (34)

Dataapi接口使用指南

1 dataapi接口概述

Dataapi接口是一组功能函数,是在原有脱机通信开发包SDK接口之上,扩展出的另一组函数接口,可以取代原有通信开发包SDK中对考勤机设备控制、数据访问的功能,但使最终应用程序开发用户在访问考勤机时,更直观、更方便、更简洁。Dataapi接口完成的功能有:

查询、计数、追加、更新、删除考勤机内与考勤用户有关的信息;

查询、计数、追加、更新、删除机内指纹相关的数据;

查询、计数、删除机内用户考勤记录数据;

查询、计数、追加、更新、删除考勤机内短信表的数据;

查询、计数、追加、更新、删除考勤机内工作表的数据;

查询、计数、删除机内管理记录数据;

查询、修改考勤机设备有关的信息。

2 dataapi接口技术说明

Dataapi接口使最终应用程序开发用户看起来是一组对考勤机内数据Set/Get 的抽象接口,在具体访问考勤用户数据时,类似于在使用最通用的SQL语句。Dataapi接口在应用程序开发用户眼中看起来更像一个数据库服务器;

Dataapi接口独立于HTTP、UDP、RS232/485通信协议,实现了与通信协议无关。因此该接口适用于目前任何物理连接形式的考勤机;

Dataapi接口仅在访问时,和终端访问PC建立连接一次连接,使用完毕后,连接自动断开。因此,该接口在连接上更安全,更适合业务模型;

Dataapi接口程序实现在考勤机内为C语言,在应用程序程序开发端(PC机)采用C语言封装的动态链接库,做到了最高效的访问接口;

Dataapi接口在设计伊始参考了SQL,但更考虑到业务中最常用的模型,是精心提炼出来的一组接口,做到了设计、实现、使用三方的平衡。

3 dataapi接口安装

Dataapi接口函数存在于文件commpro.dll中,该库依赖于其他几个文件,需要将下列DLL文件一同拷贝到windows下的系统目录(windows XP下为windows/system32):(含Demo的目录是演示程序如何编写,不要拷贝到系统目录)

(注:①每个文件功能描述见附录1,②当收到中控科技更新版本的动态库时,注意先将系统目录下的原文件删除,确认删掉后,再拷贝更新版本的DLL)。

含demo的目录是三种流行语言的开发演示程序,均附有源码及丰富的注释,如何正确成功编译它们,参见附录2。

4 dataapi接口函数详述

4.1 Connect

[函数]

DLLIMPORT void * __stdcall Connect(const char *Parameters);

[功能]

连接到设备,连接成功后返回连接的句柄。

[参数说明]

Parameters:

[in] 通过Parameter参数指定连接选项,如下列例子:

"protocol=RS232,port=COM1,baudrate=115200bps,timeout=50000,passwd=0";

"protocol=RS485,port=COM2,baudrate=115200bps,deviceid=1,timeout=50000,

"protocol=UDP,ipaddress=192.168.1.201,port=4370,timeout=50000, passwd=0";

"protocol=HTTP,ipaddress=192.168.1.201,port=80,name=12345,passwd=12345;

"protocol=HTTPS,ipaddress=192.168.1.201,port=80,name=12345,passwd=12345;

其中protocol 为使用协议,目前有RS232,RS485,UDP及HTTP(S);port为指定使用的串口;baudrate为波特率;timeout为超时设置,单位为毫秒,例中“timeout=50000”为50秒;deviceid为使用RS485协议时终端设备号;ipaddress为考勤机IP地址;port为使用端口号(端口可以理解为收音机收听广播时使用的不同频率),如果不特别强调,默认为80;name为使用HTTP连接时认证用户名,passwd为连接时使用的密码。以上参数使用时按照例子中的样式填写。

遇到网络连接质量不好时,应加大timeout的值。一般的,“timeout=50000”(50秒)可以满足基本网络使用;当查询、追加大量数据经常出现-902错误时,应加大timeout的值,可以设置:“timeout=1200000”(20分钟)。

RS232、RS485、UDP连接时,其passwd=0指的是没有密码(不设置密码),可以不用填写“passwd=0”,但是HTTP、HTTPS连接时一定要填写“passwd=xxx”的设置。

[返回值]

连接成功后返回连接句柄,否则返回NULL。

[示例]

VC:

CString szPara ="protocol=HTTP,ipaddress=192.168.1.201,port=80,name=12345,passwd=12345 ";

HANDLE h = Connect(szPara);

VB:

Private Declare Function Connect Lib "commpro.dll" (ByVal Parameters As String) As Long Dim h As Long '连接设备句柄

Dim ret As Long '函数返回

h =

Connect("protocol=HTTP,ipaddress=192.168.1.213,port=80,name=12345,passwd=12345")

MsgBox "Connect return =0x" + Hex(h)

Java:

commpro2java co = new commpro2java();

long h =

co.Connect("protocol=HTTP,ipaddress=192.168.1.213,port=80,name=12345,passwd=12345 ");

System.out.printf("Return Handle = 0x%x\n", h);

如果返回为NULL,程序注意及时终止。

当使用串口(RS232、RS285)及UDP连接时,当考勤机重新启动过,那么客户端应当关闭此次连接,重新建立一次连接;HTTP(S)可以继续使用上次的连接。

4.2 Disconnect

[函数]

DLLIMPORT void__stdcall Disconnect(void* Handle);

[功能]

断开与设备的连接。

[参数说明]

Handle:

[in] 由Connect()成功返回的句柄。

[返回值]

无。

[示例]

VC:

Disconnect(h);

VB:

Disconnect (h)

Java:

co.Disconnect(h);

[注意事项]

一旦成功调用了Connect(),都应该调用Disconnect()函数,释放资源。

4.3 DataQuery

[函数]

DLLIMPORT int__stdcall DataQuery(void *Handle, char *Buffer, int BufferSize, const char *TableName, const char *FieldNames, const char *Filter, const char *Options);

[功能]

查询设备中的数据,返回符合条件的记录数。

[参数说明]

Handle

[in] 由Connect()成功返回的句柄。

Buffer

[in] 用于接收返回数据的缓冲区,返回的数据是文本格式的,可能是多条记录,各条记录之间用\r\n(等价于ASCII的值13,10)分隔,各个字段之间用\t(等价于ASCII的值9)分隔。

BufferSize

[in] 用于接收返回数据的缓冲区大小。

TableName

[in] 数据表名,目前可用的有:

用户表:UserInfo;

指纹表:FPTemplate;

考勤表:Transaction 或者ExtLog;

操作表:OpLog;

短信表:Sms;

工作表:Workcode;

组表:Group。

(注:考勤表Transaction / ExtLog 的区分在于考勤机内部使用的.~ExtendFmt配置情况,当.~ExtendFmt=1时,应该使用ExtLog;当

~ExtendFmt=0时,应该使用Transaction)

FieldNames

[in] 字段名列表,多个字段之间用分号分开,“*”表示全部字段,此时返回数据字段的第一行是字段名

Filter

[in] 返回数据的条件,当单独一个“字段名操作符值”构成的字符串时,可以是如下几种方式:

<字段名> = <值>(“=”符号两边可以有空格或无空格)

<字段名> IN (<逗号分隔的多个值列表>)(“IN”两边须有空格)

<字段名> BETWEN (<最小值>,<最大值>) 或<字段名> BETWEN <最小值> TO <最大值>(“BETWEEN”、“TO”的两边须有空格隔开)<字段名> > <小值>(“>”符号两边可以有或无空格)

<字段名> >= <最小值>(“>=”符号两边可以有或无空格)

<字段名> < <大值>(“<”符号两边可以有或无空格)

<字段名> <= <最大值>(“<=”符号两边可以有或无空格)

<字段名> LIKE <前导字符串>*(“LIKE”的两边须有空格隔开)

<字段名> LIKE *<后缀字符串>(“LIKE”的两边须有空格隔开)

例如,“PIN>=100”是过滤所以PIN大于等于100的条件;“NAME LIKE 张*”是过滤所有姓张的用户。

当一个“字段名操作符值”构成的过滤条件时,前面可以添加“NOT ”(NOT的后面跟一个空格),例如“NOT PIN>=100”过滤PIN不是大于等于100的用户编号,即PIN<100。

当两个“字段名操作符值”构成的过滤条件时,中间运算符可以用“AND ”或“OR ”连接,例如“PIN>100 AND NAME LIKE 张*”是过滤所有编号大于且姓张的用户。

注意:

①NOT后仅跟随一个条件,不适于两个过滤条件。即条件“NOT

PIN>100 AND PRIVILEGE>1”及“NOT PIN>100 OR

PRIVILEGE>1”,均不适用。

②特别的IN 构成的过滤条件,如NAME IN (hello,wang,liu),当外国

人名中含有逗号的,在人名处添加双引号包含,如NAME IN

(“olik,wang”, sun, good),“olik,wang”就是一个含逗号的外国人名。

下面是一些常见的过滤条件串构造,如表1:

表1:常见的过滤条件构造字符串

(注:PIN字段在黑白屏机器为数值型,在彩屏机为字符串类型,引起的比较问题,见FAQ中3)

Options

[in] 进行查询的选项。这些选项是以逗号分隔的项=值对, 可能的值有: MaxReturn 指定最多返回的记录数

IgnoreCase 条件数据是否忽略大小写。

如果Options为NULL(或者””,无内容),则执行默认值:

MaxReturn=100000 指定最多返回的记录数为100000条

IgnoreCase=True 条件数据忽略大小写。

[返回值]

返回为0或者正数时,为接收数据的记录数;返回负数时,为错误,参见附录3。

[示例]

VC:

char *bufOut =(char *)malloc(2 * 1024 *1024); //至少分配K以上,这里分配的是M字节

CString strTable = "UserInfo";

CString strFields = "*";

CString strFilter = "pin<100";

CString strOptions = "";

ret = DataQuery(h, (char *)bufOut, 2 * 1024 *1024, strTable, strFields, strFilter,

strOptions);

VB:

BufferSize = 204800

Buffer = Space(BufferSize)

TableName = "UserInfo" '//可选择的表有:UserInfo/ FPTemplate/ Transaction/ OpLog/ Sms/

Workcode

FieldNames = "*" '//“*”为显示全部字段

fil = "" '//过滤条件,不填写为没有指定过滤条件

Options = ""

ret = DataQuery(h, Buffer, BufferSize, TableName, FieldNames, fil, Options)

MsgBox "DataQuery return=" + Str$(ret)

Print Buffer

Java:

int i = 0;

byte[] Buffer = new byte[5 * 1024 * 1024]; //分配M内存

for(i = 0; i<5 * 1024 * 1024;i++)

Buffer[i] = 0x00; //清空这片内存

int BufferSize = Buffer.length;

String TableName = "FPTemplate"; '//可选择的表有:UserInfo/ FPTemplate/ Transaction/

OpLog/ Sms/ Workcode

String FieldNames = "*"; //“*”为显示全部字段

String Filter = ""; //出现中文时,使用 Filter.getBytes(“gb2312”) 传递参数String Options = "";

int len = co.DataQuery(h, Buffer, BufferSize, TableName.getBytes(), FieldNames.getBytes(), Filter.getBytes(), Options.getBytes());

String szBuffer = new String(Buffer);

int nNull = szBuffer.indexOf(0)+1; //找到第一个'\0'的位置,重新构造一个串

String szRet = new String(Buffer, 0, nNull);

System.out.println(szRet);

[注意事项]

当使用低速网络,如GPRS、串口,查询大量的数据,使过程非差慢的解决思路参见FAQ 4。

4.4 DataCount

[函数]

DLLIMPORT int__stdcall DataCount(void*Handle, const char*TableName, const char *Filter, const char *Options);

[功能]

查询设备中的数据记录数,返回指定数据的记录数

[参数说明]

Handle

[in] 由Connect()成功返回的句柄。

TableName

[in]数据表名,目前可用的表名参见函数DataQuery( )中的TableName。

Filter

[in] 返回数据的条件,说明参见函数DataQuery()函数。

Options

[in] 进行查询的选项。这些选项是以逗号分隔的项=值对, 可能的值有: IgnoreCase 条件数据是否忽略大小写.

如果,Options为NULL(或者””,无内容),则执行默认值:

IgnoreCase=True 条件数据忽略大小写.

[返回值]

返回为0或者正数时,为指定数据的记录数;返回负数时,为错误,参见附录3

[示例]

VC:

CString strTable = "UserInfo";

CString strFilter = "pin<100";

CString strOptions = "";

ret = dataCount(h, strTable, strFilter, strOptions);

VB:

TableName = "UserInfo"

fil = ""

Options = ""

ret = DataCount(h, TableName, fil, Options)

MsgBox "DataCount return=" + Str$(ret)

Java:

TableName = "UserInfo";

Filter = ""; //出现中文时,使用 Filter.getBytes(“gb2312”) 传递参数

Options = "";

len = co.DataCount(h, TableName.getBytes(), Filter.getBytes(), Options.getBytes());

System.out.printf("DataCount Return = %d\n", len);

[注意事项]

无。

4.5 DataAppend

[函数]

DLLIMPORT int__stdcall DataAppend(void *Handle, const char *TableName, const char*Datas,

const char *Options );

[功能]

增加数据到设备中,返回设备成功新增的数据记录数

[参数说明]

Handle

[in] 由Connect()成功返回的句柄。

TableName

[in] 数据表名,目前可用的表名参见函数DataQuery( )中的TableName。

Datas

[in] 数据记录表示,数据是文本格式的,可以多条记录之间用\r\n分隔,各个“字段=值”对之间用\t分隔(\r\n等价于VB中的vbCrLf,ASCII的值13,10,\t等价于VB中的vbTab,ASCII的值9),例如:

PIN=12345 Name=Richard Password=2298

PIN=12346 Name=王玲玲Password=2 Gender=Female

PIN=1

如果一条新数据的某些字段没有指定值,则固件会根据具体的字段定义使用默认值;

(注:PIN=12345 Name=Richard两者之间已经包含着不可见的\t,在界面上用Ctrl+Tab组合输入,行和行之间已经包含着\r\n的分隔符,程序源代码中应明确使用它们)。

Options

[in] 新增数据的选项, 用来控制异常发生时如何处理。这些选项是以逗号分隔的“项=值”对, 可能的值有:

IgnoreNewField=True (默认行为)如果设备的固件不支持某个字段,则

忽略掉该字段。

IgnoreNewField=False 如果设备的固件不支持某个字段,则产生错误。

UpdateOldData=True (默认行为)如果一条记录的关键字对应记录已

经存在,则更新其他指定字段的值,但不计入新增记录数中。

UpdateOldData=False 如果一条记录的关键字对应记录已经存在,则产

生错误。

ErrorBreak=False (默认行为)如果新增一条记录遇到错误,则忽略

当前记录,继续新增下面的记录

ErrorBreak=True 如果新增一条记录遇到错误,则忽略当前和以后的

全部要新增的记录

IgnoreSizeError=True (默认行为)如果数据长度超出固件所支持的范

围,则仅保留数据的前面部分

IgnoreSizeError=False 如果数据长度超出固件所支持的范围,则产生错

[返回值]

返回为0或者正数时,设备成功新增的数据记录数;返回负数时,为错误,看见附录3

[示例]

VC:

CString strTable = "UserInfo";

CString strPost = "PIN=2111\r\nPIN=2112\tname=www\r\nPIN=2113";//在代码中要显示的使

用”\r\n”及”\r”

CString strOptions = "";

ret = dataAppend(h, strTable, strPost, strOptions);

VB:

TableName = "UserInfo"

Options = ""

Datas = "PIN=2111" + vbTab + "name=ixie" + vbCrLf + "PIN=2113" + vbCrLf + "PIN=2112"

ret = DataAppend(h, TableName, Datas, Options)

MsgBox "DataAppend return=" + Str$(ret)

Java:

TableName = "UserInfo";

Options = "";

String Datas = "PIN=2111\r\nPIN=2112\r\nPIN=2113"; //出现中文时,使用

// Datas.getBytes(“gb2312”) 传递参数len = co.DataAppend(h, TableName .getBytes(), Datas .getBytes(), Options .getBytes());

System.out.printf("DataAppend Return = %d\n", len);

[注意事项]

当使用低速网络,如GPRS、串口,追加大量的数据,使过程非差慢的解决思路参见FAQ 4。

4.6 DataUpdate

[函数]

DLLIMPORT int__stdcall DataUpdate(void *Handle, const char *TableName, const char

*DataValues, const char *Filter, const char *Options);

[功能]

更新设备中的数据

[参数说明]

Handle

[in] 由Connect()成功返回的句柄。

TableName

[in] 数据表名,目前可用的表名参见函数DataQuery( )中的TableName。

DataValues

[in] 用\t分隔的“字段=值”对(\t等价于VB中的vbTab,ASCII的值9, 在界面上用Ctrl+Tab组合输入)。

Filter

[in] 返回数据的条件,说明参见函数DataQuery()函数。

Options

[in] 进行查询的选项。这些选项是以逗号分隔的项=值对, 可能的值有: IgnoreCase 条件数据是否忽略大小写.

如果,Options为NULL(或者””,无内容),则执行默认值:

IgnoreCase=True 条件数据忽略大小写.

[返回值]

返回为0或者正数时,设备成功更新的数据记录数;返回负数时,为错误,参见附录3

[示例]

VC:

CString strTable = "UserInfo";

CString strPost = "name=xyz";

CString strFilter = "pin<100";//将用户表中pin<100的用户的姓名,更改为xyz

CString strOptions = "";

ret = dataUpdate(h, strTable, strPost, strFilter, strOptions); //

VB:

TableName = "UserInfo"

fil = "pin<100" '//过滤条件

Options = ""

DataValues = "name=xyz"

ret = DataUpdate(h, TableName, DataValues, fil, Options)

MsgBox "DataUpdate return=" + Str$(ret)

Java:

TableName = "UserInfo";

Filter = "pin<2111";

Options = "";

String DataValues = "name=xyz"; //出现中文时,使用 DataValues.getBytes(“gb2312”) 传递参数

len = co.DataUpdate(h, TableName.getBytes(), DataValues.getBytes(), Filter.getBytes(), Options.getBytes());

System.out.printf("DataUpdate Return = %d\n", len);

[注意事项]

无。

4.7 DataDelete

[函数]

DLLIMPORT int__stdcall DataDelete(void*Handle, const char*TableName,const char*Filter, const char *Options );

[功能]

删除设备中的数据

[参数说明]

Handle

[in]由Connect()成功返回的句柄。

TableName

[in] 数据表名,目前可用的表名参见函数DataQuery( )中的TableName。

Filter

[in] 返回数据的条件,说明参见函数DataQuery()函数。

Options

[in] 进行查询的选项。这些选项是以逗号分隔的项=值对, 可能的值有: MaxReturn 指定最多返回的记录数

IgnoreCase 条件数据是否忽略大小写.

如果,Options为NULL(或者””,无内容),则执行默认值:

MaxReturn =100000 指定最多返回的记录数为100000条

IgnoreCase=True 条件数据忽略大小写.

[返回值]

返回为0或者正数时,为成功删除的记录数;返回负数时,为错误,参见附录3

[示例]

VC:

CString strTable = "UserInfo";

CString strFilter = "name like 张*";

CString strOptions = "";

ret = dataDelete(h, strTable, strFilter, strOptions);

VB:

TableName = "UserInfo"

fil = "pin=2112" '//过滤条件

Options = ""

ret = DataDelete(h, TableName, fil, Options)

MsgBox "DataDelete return=" + Str$(ret)

Java:

TableName = "UserInfo";

Filter = "pin=2112"; //出现中文时,使用 DataValues.getBytes(“gb2312”) 传递参数

Options = "";

len = co.DataDelete(h, TableName.getBytes(), Filter.getBytes(), Options.getBytes());

System.out.printf("DataDelete Return = %d\n", len);

[注意事项]

4.8 InfoQuery

[函数]

DLLIMPORT int__stdcall InfoQuery(void *Handle, char *Buffer, int BufferSize, const char *Items);

[功能]

查询设备信息,返回值为数据的长度。

[参数说明]

[in] 由Connect()成功返回的句柄。

Buffer

[in] 用于接收返回数据的缓冲区,返回的数据是文本格式的,可能是多条记录,各条记录之间用\r\n分隔。

BufferSize

[in] 用于接收返回数据的缓冲区大小。

Items

[in] 要查询的设备信息项名称表,多个名称之间可以用逗号分开。当前可用的信息项参看附录4,

[返回值]

返回为0或者正数时,为数据的字节长度;返回负数时,为错误,参见附录3。

当执行函数

InfoQuery(h,

“System.OS,System.Style,System.OEMVender,System.SN,System.FwVersion,System.OSVersion”)时,参数Buffer返回下面绿色部分。(包含第一行字符串,但长度223,为从第二行后开始到末尾计数字节的个数,没有包括“RET=223\r\n”这几个字节,即整个返回应该为223+strlen(“RET=223”)+2=230个字节(算式中的 2 指的是”\r\n”的长度)。

RET=223

System.OS=Linux bjdev 2.6.12-co-0.7.1 #1 Sat Mar 3 15:31:42 CET 2007 i686 GNU/Linux\n

System.Style=A11

System.OEMVender=ZKSoftware Inc.

System.SN=U10228

System.FwVersion=Ver 6.39 Apr 22 2008

System.OSVersion=Linux\n

[示例]

char *bufOut =(char *)malloc(2 * 1024 *1024); //至少分配K以上,这里分配的是2M字节CString szKey = "System.GetTime,System.OS"

ret = infoQuery(h, (char *)bufOut, 2 * 1024 * 1024, szKey);

VB:

BufferSize = 204800

Buffer = Space(BufferSize)

Cls

Items = "System.GetTime,System.OS"

ret = InfoQuery(h, Buffer, BufferSize, Items)

Print Buffer

MsgBox "InfoQuery return=" + Str$(ret)

Java:

byte[] Buffer = new byte[5 * 1024 * 1024]; //分配5M内存

for(i = 0; i<5 * 1024 * 1024;i++) Buffer[i] = 0x00; //清空这片内存

String Items = "System.GetTime, System.OS ";

len = https://www.360docs.net/doc/1d15282560.html,Query(h, Buffer, BufferSize, Items.getBytes());

int nNull2 = szBuffer2.indexOf(0)+1; //找到第一个'\0'的位置,重新构造一个串String szRet2 = new String(Buffer, 0, nNull2);

System.out.println(szRet2);

[注意事项]

参数Itmes总的字节长度不要大于2K。

4.9 InfoUpdate

[函数]

DLLIMPORT int__stdcall InfoUpdate(void *Handle, const char *ItemAndValues );

[功能]

设置设备信息

[参数说明]

Handle

[in] 由Connect()成功返回的句柄。

ItemAndValues

[in] 设置设备的“信息项=值”对,多个项之间用\r\n分隔(等价于VB中的vbCrLf,ASCII的值13,10),例如:

System.PlayV oice= FILE:S_2.wav 播放语音文件S_2.wav

Options.Baudrate=115200 设置/485的通信波特率

System.VideoFile=BASE64:xxx 上传宣传视频文件

(注:例中行和行之间已经用\r\n分开了,在源代码中应明确使用\r\n字符)。

[返回值]

返回为0为成功;返回负数时,为错误,参见附录3

[示例]

VC:

CString pCode = "System.Beep=3\r\nSystem.PlayVoice=FILE:S_2.wav";

int ret = infoUpdate(h, pCode); //

VB:

ItemAndValues = "System.PlayVoice=FILE:S_3.wav"

ItemAndValues = ItemAndValues + vbCrLf …//\r\n

ItemAndValues = ItemAndValues + "System.Beep=3"

ret = InfoUpdate(h, ItemAndValues)

MsgBox "InfoUpdate return=" + Str$(ret)

Java:

String ItemAndValues = "System.Beep=3\r\nSystem.PlayVoice=FILE:S_2.wav";

len = https://www.360docs.net/doc/1d15282560.html,Update(h, ItemAndValues.getBytes());

System.out.printf("InfoUpdate Return = %d\n", len);

[注意事项]

无。

4.10 GetRTLog

[函数]

DLLIMPORT int __stdcall GetRTLog(void *Handle, char *Buffer, int BufferSize);

[功能]

实时获取考勤机的数据。

[参数说明]

Handle

[in] 由Connect()成功返回的句柄。

Buffer

[in] 用于接收返回数据的缓冲区,返回的数据是文本格式的,可能是多

条记录,各条记录之间用\r\n(等价于ASCII的值13,10)分隔,各个字段之间用\t(等价于ASCII的值9)分隔。

返回的数据如下例:(两条记录间已经用\r\n分开,字段之间已经用\t分开)EVENT=128 PIN=2

EVENT=1 PIN=2 VERIFIEDMETHOD=1 V ALID=0 ATTSTATE=0

YEAR=2008 MONTH=7 DAY=30 HOUR=14 MINUTE=7

SECOND=20

返回的值如下表:

表2:GetRTLog返回内容描述

BufferSize

[in] 用于接收返回数据的缓冲区大小。

[返回值]

返回为0或者正数时,为接收数据的记录数;返回负数时,为错误,参见附

Erwin工具使用指南

Erwin工具使用指南(版本号:V )

文档修订状况

目录 第一章基本概念 (4) 数据模型(Modal) (4) 视图 (4) 逻辑视图(Logical) (4) 物理视图(Physical) (4) 第二章操作指南 (6) 新建模型 (6) 视图切换 (7) 新建主题区域 (7) 切换主题区域 (9) 编辑主题区域 (10) 选择现有数据实体到指定的主题区域。 (10) 在主题区域新建数据实体 (11) 在主题区域删除数据实体 (12) 数据实体导航 (13)

第一章基本概念 1.1数据模型(Modal) 数据模型是数据实体(Entity)和数据实体间的关系(Relationship)总和。可以简单的理解认为数据实体就是对应数据库表,实体间的关系就是表之间的关系。 1.2视图 Erwin对数据模型提供两种视——逻辑视图、物理视图。 1.2.1逻辑视图(Logical) 是以业务需求的概念对数据模型进行描述。通俗的说,在逻辑视图中我们可以用中文或描述性的语言来描述数据实体(表)和数据实体的属性(字段)。下面就是一个对车辆信信息实体的逻辑视图。 1.2.2物理视图(Physical) 物理视图与逻辑视图一一对应,物理视图是针对一种具体的数据库进行逻辑视图的物理映射。通俗的说,在物理视图中我们必须为每一个在逻辑视图中出现的数据实体(表)指定一个可被具体数据库接纳的表名称,譬如我们使用MySQL作为我们的数据库实现,我们就必须为具体的实体指定一个数据库表名(英文单词或词组),同样的对实体属性(字段)的命名也需进行转换,数据类型也需要具体为数据库支持的数据类型。下面就是对应车辆信息实体针对MySQL数据的物理视图。

ERwin使用说明(中英文)

Getting Started with ER win (Erwin 入门) by Dr. Peter Wolcott Department of Information Systems and Quantitative Analysis College of Information Science and Technology University of Nebraska at Omaha(由内布拉斯加州的奥马哈大学信息科学与技术学院门的信息系统和定量分析博士彼得著) Introduction (介绍) ER win is a popular data modeling tool used by a number of major companies in Omaha and throughout the world. (Erwin是受奥马哈和世界各地的一些主要的公司欢迎的数据模型工具) The product is currently owned, developed, and marketed by Computer Associates, a leading software developer.(该产品是由具有领导地位的CA软件开发公司拥有、开发和销售) The product supports a variety of aspects of database design, including data modeling, forward engineering (the creation of a database schema and physical database on the basis of a data model), and reverse engineering (the creation of a data model on the basis of an existing database) for a wide variety of relational DBMS, including Microsoft Access, Oracle, DB2, Sybase, and others.该软件为多种多样的关系型数据库管理系统,包括 Microsoft Access,甲骨文,Sybase,DB2,和其他人提供支持数据库设计的各个方面,包括数据建模、正向工程(在现有的数据模型的基础上创建数据模式和物理数据库)和逆向工程(在现在的数据库基础上创建数据模型) This brief tutorial steps you through the process of creating a data model using ER win.(你可以通过这个简单教程中的步骤运用Erwin来创建数据模 型) It will not explain all aspects of ERwin, but will show you the minimum necessary to create and use data models for this class. (这个课程不可能全面地讲解Erwin,但它向你展示了必要的最基本的创建和使用数据模型的知识) It consists of three major segments, which correspond to the project-related assignments in your class: (这个课程由三个主要部分组成,它与有关项目任务相符) 1.Creation of a basic data model (Conceptual data model) 创建一个 基本的数据模型(概念数据模型) 2.Creation of a database schema 建立数据库模式 3.Creation of the database创建数据库

ERwin简单教程

Erwin教程 erwin是一个数据库关系实体模型(ER Model)设计工具,与Power Designer(Sybase公司开发)成为最常用的两种数据库设计工具。目前该工具被CA收购,成为CA数据库解决方案中的一个关键部分。与微软的Vision相比,erwin只能设计er model,而且设计界面选项较多,相对来说并不那么友好,增加了使用的难度。但如果你是一个出色的数据库应用开发者,那你一定会发现erwin的好处。因为在设计模型层次和复杂度提高以后,visio难以应付众多的数据对象设计和对象之间的关系设计。而且erwin提供了数据库正向工程、逆向工程和文档正向工程功能,可以把设计直接实施到数据库后者把数据库中的对象信息读到erwin设计中,也可以生成设计文档,格式还可以自动定义。在本教程中,将告诉大家我是怎样简单的使用erwin来进行数据库设计的。这里强调了简单二字,就是说有很多只有20%机会用到的80%的功能本教程是不会介绍的。本文用到的erwin版本是4.0。 教程一:Table & Subject Areas Table是数据库中最基本的物理元素,保持了应用的持久数据。在普通的信息系统数据库结构设计中,有90%的工作是在设计table。而table的字段定义和表间的关系,也反映了整个系统的数据流图和大致的业务流程。 Subject Areas是erwin提供逻辑元素,在实际数据库中并不存在。它的含义是把物理元素和逻辑元素按照实际意义划分成各个主题,在主题域中添加对元素的引用,起到一个按图索骥和目录的作用。有一个缺省的主题域Main Subject Area,所有的元素都会在该主题域中存在。在我本人的设计方法中,我会新建诸如“参数表”,“分户表”,“控制表”,“临时表”,“明细表”,“日志表”和“总帐”等主题域。 下面跟着我的说明,一步一步来设计table: 装好erwin4.0后,打开程序。提示你是创建一个新模型还是打一个已有的,选择创建新模型。在Model Type中选择Physical(物理模型),下面的Target Database默认值就是Oracle8.x,使用默认值,点击OK,创建了一个空白的模型。

Erwin工具使用指南

Erwin工具使用指南(版本号:V 1.0)

文档修订状况

目录 第一章基本概念 (4) 1.1 数据模型(Modal) (4) 1.2 视图 (4) 1.2.1 逻辑视图(Logical) (4) 1.2.2 物理视图(Physical) (4) 第二章操作指南 (6) 2.1 新建模型 (6) 2.2 视图切换 (7) 2.3 新建主题区域 (7) 2.4 切换主题区域 (9) 2.5 编辑主题区域 (10) 2.5.1 选择现有数据实体到指定的主题区域。 (10) 2.5.2 在主题区域新建数据实体 (11) 2.5.3 在主题区域删除数据实体 (12) 2.6 数据实体导航 (13)

第一章基本概念 1.1 数据模型(Modal) 数据模型是数据实体(Entity)和数据实体间的关系(Relationship)总和。可以简单的理解认为数据实体就是对应数据库表,实体间的关系就是表之间的关系。 1.2 视图 Erwin对数据模型提供两种视——逻辑视图、物理视图。 1.2.1 逻辑视图(Logical) 是以业务需求的概念对数据模型进行描述。通俗的说,在逻辑视图中我们可以用中文或描述性的语言来描述数据实体(表)和数据实体的属性(字段)。下面就是一个对车辆信信息实体的逻辑视图。 1.2.2 物理视图(Physical) 物理视图与逻辑视图一一对应,物理视图是针对一种具体的数据库进行逻辑视图的物理映射。通俗的说,在物理视图中我们必须为每一个在逻辑视图中出现的数据实体(表)指定一个可被具体数据库接纳的表名称,譬如我们使用MySQL作为我们的数据库实现,我们就必须为具体的实体指定一个数据库表名(英文单词或词组),同样的对实体属性(字段)的命名也需进行转换,数据类型也需要具体为数据库支持的数据类型。下面就是对应车辆信息实体针对MySQL数据的物理视图。

ERWin简明教程

ERWIN操作手册 操作手册 文档修订 版本日期更改人描述(注明修改的条款或页)V1.0 王朝操作手册 2003年9月8日 山东浪潮齐鲁软件产业股份有限公司 电子政务产品事业部

目录 1.通过Erwin 建立er1文件...........................................................................................................2 2用ERWin 的方法将ERWin 中的表导入到数据库中.................................................................6 3用ERWin 的方法将数据库表结构导入到ERWin 中 (18) Erwin 数据库设计工具 介绍 数据库设计错误将会导致在很长一段时间内不断听到各种抱怨,因此,选择 一个适合的数据库开发工具对数据环境进行规范将非常重要 . Erwin 在物理数据库的生成和反向生成、双向同步和比较功能方面居领先地位 ,可以进行逆向工程、能够自动生成文档、支持与数据库同步、支持 团队式 开发,所支持的数据库多达20多种。 Erwin 数据库设计工具可以用于设 计生成客户机/ 服务器、Web 、Intranet 和数据仓库等应用程序数据库。 1.1.通过通过Erwin 建立er1文件文件 在开始\程序菜单中打开Erwin,在Erwin 主窗口中单击create model 图标弹出如下窗口:

在new model type选项中选择physical项,在database中选择oracle类型,version中选择9.x版本,如下图: 点击ok按钮. 1.1建表

Erwin的使用手册

ERwin的使用手册 1. ERwin简介 ERwin是一个数据库关系实体模型(ER Model)设计工具,与Power Designer(Sybase公司开发)成为最常用的两种数据库设计工具。目前该工具被CA收购,成为CA数据库解决方案中的一个关键部分。与微软的Vision相比,ERwin只能设计er model,而且设计界面选项较多,相对来说并不那么友好,增加了使用的难度。但如果你是一个出色的数据库应用开发者,那你一定会发现ERwin的好处。因为在设计模型层次和复杂度提高以后,visio难以应付众多的数据对象设计和对象之间的关系设计。而且ERwin提供了数据库正向工程、逆向工程和文档正向工程功能,可以把设计直接实施到数据库后者把数据库中的对象信息读到ERwin设计中,也可以生成设计文档,格式还可以自动定义。在本教程中,将告诉大家我是怎样简单的使用ERwin来进行数据库设计的。这里强调了简单二字,就是说有很多只有20%机会用到的80%的功能本教程是不会介绍的。本文用到的ERwin版本是4.0。 2.ERwin使用 2.1正向工程 ⑴新建文件,如图1所示: 图1 Logical:只创建逻辑模型 Physical:只创建物理模型 Logical/ Physical:二者均可创建

⑵假设创建逻辑模型,可选择Logical,如图2所示: 工 绘图区 图2 常用的有以下几种: :用于移动; :用于创建实体。 :用于“Complete sub-category” :用于连接。“Identifying relationship”,即为标值关系。注意:先点的为被引用的表,后点的为引用的表。 :用于多对多连接。“Many-to-many relationship”注意:先点的为被引用的表,后点的为引用的表。 :用于连接。“Non- identifying relationship”,即为非标值关系。注意:先点的为被引用的表,后点的为引用的表。

相关文档
最新文档