SatRDA高效远程数据访问组件使用说明书

SATRDA说是什么?

SatRDA是高效的远程数据访问组件,大数据量测试比外网直连数据库速度提升10-200倍。使用它无需要改动原来的数据连接访问代码就可以支持外网访问远程数据库。能够为android/ios等APP提供restful架构的数据接口。部署非常简单,服务器客户端都无需安装,也无需安装iis,tomcat等其它软件。服务器端使用google的golang开发支持10M级并发。支持pb,delphi,vc,.net,java等语言直接编写服务端插件,提供了各语言使用satrda插件完成APP的开发的示例。

支持数据库:SQLSERVER,ORACLE,MYSQL, PostgreSQL, Sybase, db2
服务器端运行环境:WindowsXP及以上 / Linux

支持功能

1.数据驱动支持两层直接转三层,无需修改代码,解决外网易断线和速度慢问题

2.支持多种语言C++、delphi、pb、.net、java开发服务端功能,可用于web相关的包括session处理,html页面处理服务,数据处理等,也可把现有的CS逻辑移到服务端,以及APP开发等。

3.存储过程直接转成restful服务

4.APP开发示例

5.即时通信(基于websocket)

6.Http文件服务

7.客户端Http API,文件上传下载

8.自动升级

9.CS程序浏览器运行

速度对比

服务器端配置:阿里云 单核1G,1M带宽

客户端:XP 酷睿I5 2G, 20M带宽

检索对比

插入对比

说明:直连无批量方式,插入大数据时间太久,未进行测试

运行步骤:

1. 把server目录拷备到服务器

2. 修改server/dbconfig数据连接信息,参见数据库连接配置

3. 运行server/satserver.exe启动服务器

4. 修改test中的连接信息

定义配置文件

************************************************************************************

运行相关配置文件

运行相关配置文件路径:server/config/config 用于设置服务器相关的运行信息,测试效果可以不用修改
配置如下:

1
2
3
4
5
6
7
{
"TAG": "QQ:9091178",
"Port": 5555,
"Https":true,
"Log": 1,
"SecrectKey":""
}

参数说明:

“Port”:5555 服务器端口号(可将5555修改为未被占用的端口号,注意这个不是数据库的端口号)

“Log”: 1 是否显示日志 (0不显示日志,1显示日志)

“Https”:false 是否使用Http (true启用https,false不启用)

数据库连接配置

文件路径server/config/dbconfig , 用于设置连接数据库的相关信息,可以连接多个数据库。配置内容是json格式建议使用notepad++等打开,格式更清晰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"mycon1": {
"DBType": "odbc",
"Provider": "driver=sql server native client 10.0;server=X6P2J80LPMLFALP\\SQLEXPRESS;uid=dbuser;pwd=sql;database=test;Mars_Connection=yes;lock=RU;"
},
"mycon2": {
"DBType": "odbc",
"Provider": "driver=Oracle in OraDb10g_home1;SERVER=ORCL;uid=system;pwd=sql;EXC=T"
},
"mycon3": {
"DBType": "odbc",
"Provider": "dsn=mysql1;uid=root;pwd=sql"
}
}

说明:这里定义了3个数据库连接mycon1、mycon2、mycon3

前两个通过指定驱动名和连接串连接,后一个在32位odbc管理器配置dsn进行连接。

建议熟悉连接串的优先使用连接串连接(如sqlserver),其它连接串不清楚,或者使用连接串方式连接不上,可以在odbc管理器中建立dsn,测试连接成功,再在配置文件中指定该dsn,如mycon3配置。

mycon1连接sql server中名为test的数据库

mycon2连接oracle数据库ORCL

mycon3连接名称为mysql1的dsn

参数说明:

mycon1: 连接名称,用于客户端与数据库连接的名字,对应客户端连接字符串的DB_NAME

“DBType”: “odbc” 数据库类型对应只能是odbc

Provider 连接字符串,只能填写odbc连接字符串

driver=sql server native client 10.0; 这里的sql server native client 10.0是机器上注册了的odbc驱动程序,可以在机器上通过odbc32位驱动管理器查看(64位系统请在运行窗口中运行

C:\Windows\SysWOW64\odbcad32.exe”来启动)。每台机器上注册的驱动可能不同,sql server建议使用Native驱动,速度会快很多。如

1
2
3
sql server native client 10.0

Sql Server Native Client 11.0

如果没有相应的驱动,请网上搜索下载。

server=X6P2J80LPMLFALP\\SQLEXPRESS 需要连接的服务器,如果名称带’\’,需要使用’\\’,因为’\’在json中代表转义符,否则会解析出错

uid=system; 数据库用户名,

pwd=sql; 数据库密码

lock=RU;使用RU锁机制,可以避免一些死锁发生

注:

如果连接字符串通过driver不能连接成功,可以自己在odbc管理器中配置dsn,然后设置dsn连接,如oracel 11G 中 配置dsn后连接字符串指定

1
 
1
"orcl": {"DBType": "odbc","Provider": "DSN=dbt;uid=system;pwd=sql; "}

配置案例

配置SQL Server

1.打开server\config\dbconfig,建议使用notepad++,格式更清晰,如图:

2.修改driver为自己机器注册的驱动,打开odbc 32位管理器,(64位系统请在运行窗口中运行“C:\Windows\SysWOW64\odbcad32.exe”来启动)

查看驱动程序列表,看sqlserver支持的驱动程序,把红圈标注的名称替换dbconfig的driver

修改server 指向sqlserver数据库服务,uid为数据库用户名,pwd为数据库密码,database为数据库名,并保存。

3. 运行satserver.exe,完成。

示例准备

如果需要运行PB,VB,Delphi的数据示例,可以使用以下语句建表(以下语句基于SQLServer, ORACEL请自行修改,然后相应的账套测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE test1(
id int primary key,
name varchar(20),
image image,
dt datetime,
num int,
price numeric(10, 2) ,
des nvarchar(max)
);

CREATE procedure sp_rda_test6
@in1 int,
@in2 varchar(200),
@in3 decimal(10,2),
@in4 datetime,
@out1 int output,
@out2 varchar(255) output,
@out3 decimal(10,2) output,
@out4 datetime output
as
set @out1 = @in1
set @out2 = @in2
set @out3 = @in3
set @out4 = @in4
select @out1,@out2,@out3,@out4;

PB使用
PB老程序迁移只需要修改连接字符串,其它代码不用进行修改。
示例

1
2
3
4
5
6
7
8
9
String ls_server,ls_db

ls_server = "127.0.0.1:5555"
ls_db = "mstest"
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm =
"ConnectString='Driver=Smart ODBC Driver;UID=sa;PWD=123456;Server=" + ls_server + ";DB_NAME=" + ls_db + ";HTTPS=0'"
connect using sqlca;

其中ls_server指定服务器IP地址或者域名:端口号
ls_db为在dbconfig中配置名称,不是数据库名
UID和PWD为保留,这里可以随便填写
HTTPS如果为0使用http,为1使用Https,需要和服务器端设置相匹配。虽然服务端设置为Http这里设置https=1也可以连接,但是客户端交互更多,效率更低。
Delphi使用
Delphi使用可以直接修改连接字符串

1
2
server := '127.0.0.1:5555';
db := 'mycon1';

ADOConnection1.ConnectionString := ‘driver=Smart ODBC Driver;server=’ + server + ‘;DB_NAME=’ + db + ‘;Uid=1;Pwd=;HTTPS=0;PB=0;’ ;
ADOConnection1.CursorLocation := clUseClient; //注意需要设置为clUseClient方式

其中server指定服务器IP地址或域名:端口号
db为在dbconfig中配置名称
User ID和Password为保留,这里可以随便填写
HTTPS如果为0使用http,为1使用Https,需要和服务器端设置相匹配。虽然服务端设置为Http这里设置https=1也可以连接,但是客户端交互更多,效率更低。
VB使用

1
2
3
4
5
6
7
8
Dim Server As String
Dim db As String
Server = "127.0.0.1:5555"
db = "mssql"

ConnectionString = "driver=Smart ODBC Driver;server=" & Server & ";DB_NAME=" & db & ";Uid=1;Pwd=;HTTPS=0;PB=0;"
adocon.CursorLocation = adUseClient '注意需要设置为adUseClient
adocon.Open ConnectionString

其中server指定服务器IP地址或域名:端口号
db为在dbconfig中配置名称
User ID和Password为保留,这里可以随便填写
HTTPS如果为0使用http,为1使用Https,需要和服务器端设置相匹配。虽然服务端设置为Http这里设置https=1也可以连接,但是客户端交互更多,效率更低。
Restful(Json)架构实现
Restful介绍
一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。(来源百度百科)
目前Restful广泛应用于App,网页,应用软件与服务器进行通讯,是目前最主流的网络交互方式,包括,百度,腾讯,阿里等公司接口,几乎都以Restful方式提供接口(Json格式)

SATRDA实现Restful(json)
使用SATRDA无需了解Web服务器开发知识和学习新的语言,可以通过编写数据库存储过程的方式方便实现Restful架构。

调用方式1
SATRDA对存储过程的名称和参数名字等没有要求,存储过程返回的结果集会作为Json的ResultSet字段返回给调用端。为方便与APP等交互,传入数据和返回Json格式都以utf8进行编码。

以SQLSERVER为例:

创建1个存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQLSERVER
Create procedure sp_fun_test
@in1 int,
@in2 nvarchar(20),
@out nvarchar(20) output
as
set @out = '我是输出参数'
select @in1 as col1,@in2 as col2
ORACEL
create or replace procedure sp_fun_test(type_cur out SYS_REFCURSOR, in1 integer, in2 VARCHAR2)
as
begin
OPEN type_cur FOR
select id,name from test1;
end sp_fun_test;

客户端通过Post方式调用

1
url: http://127.0.0.1:5555/restful/rpc

post数据(json格式):

1
{ "db":"mycon1","function":"sp_fun_test", "in1":10,"in2":"就是这么简单" }

返回结果:

1
{"success":true,"err":"","resultset":[{"col1":10,"col2":"就是这么简单"}],"out":"我是输出参数"}

说明:
url中的127.0.0.1:5555请换成自己服务器地址和端口号

post数据
参数 必选 类型 说明
db yes string satrda配置中设置的账套名
function yes string 存储过程名称
in1 no string/number 对应存储过程参数名称无@,小写
In2 no string 对应存储过程参数名称无@,小写

返回结果

返回值字段 字段类型 字段说明
success boolean true成功,false失败
err string Success为false时显示错误信息
resultset array 存储过程结果集的json数组
out string 定义的output参数会加入,方便返回额外的记录

调用方式2
SATRDA对存储过程的名称和参数名字等没有要求,存储过程返回的单条结果集,结果集的第1个字段数据用来作为返回结果。这样的目的是用户能够灵活地拼接自己的返回数据。

示例

1
2
3
4
5
6
SQLSERVER
Create procedure [dbo].[sp_fun_json]
@in1 int,
@in2 nvarchar(20)
as
select '{"success":true,"data":"hello"}';

客户端通过Post方式调用

1
url: http://127.0.0.1:80/restful/pro

post数据(json格式):

1
{ "db":"odbctest","function":" sp_fun_json ", "in1":10,"in2":"就是这么简单" }

返回结果:

1
{"success":true,"data":"hello"}

参数说明见调用方式1
测试工具
在satrda的http演示示例中,提供了pb调用json的示例。

在测试工具文件中包括了一个小巧的http测试工具,可以用于测试自己的接口

SATRDA插件
SATRDA服务端支持插件,插件支持pb、c、c++、delphi等语言编写。通过插件,可以实现返回网页、json,把业务逻辑放到服务器执行等功能。

配置插件
将示例中的plugins文件夹拷备到satserver.exe相同目录。
PB插件
1. 修改plugins目录下config.cfg,

1
2
3
4
5
6
7
8
9
10
{
"pbtest": {
"Dir": "test",
"Method":"Get;Post",
"URL": "/pbtest/**",
"Type": "pb",
"DLL": "pbvm90.dll",
"AppName":"plugin"
}
}

参数说明:
“Dir”: “test” 表示插件的目录,所有插件都在plugins目录下面,这里值为”test”代表插件在plugins目录下的test目录
“Method”:”Get;Post” 表示http调用的方法,可以为Get,Post,Any,Put,Delete中的一个或多个,多个以;分隔
“URL”: “/pbtest/**” 表示响应以http://ip:port/pbtest开头的url。这里”/pbtest/**”可以响应http://127.0.0.1:5555/pbtest/test.go,也可以响应http://127.0.0.1:5555/pbtest/tttt.go等。如果设置为”URL”: “/pbtest/test.go”则只响应http://127.0.0.1:5555/pbtest/test.go
“Type”: “pb” 表示调用PB插件
“DLL”: “pbvm90.dll” 表示pb运行库的dll名称,这里是pb9的运行库,其它版本请自行设置。比如12.5运行库设置为”DLL”: “pbvm125.dll”
“AppName”:”plugin” 表示pb的application的名称,一定要和创建的pb的名称对应起来

2. 创建PB工程
Pb工程和pbl创建和原来创建一样,Application的name需要和配置的AppName一样。创建一个Function名称为satrda_service,如图:

当配置的url被调用时,会调用到代码里的这个方法。参数信息和使用见示例

注意:
1.方法的名称一定要是satrda_service
2.由于在不同的线程中,pb对象不支持跨线程访问,所以全局变量也会有多份,访问的全局变量可能是不同的对象,不要依赖全局变量存储公共信息。公共信息通过session或者数据库存储
DLL插件(dephi,c++等编写dll)
1. 修改plugins目录下config.cfg,

1
2
3
4
5
6
7
8
9
10
{
"dtest": {
"Dir": "dtest",
"Method":"Get;Post",
"URL": "/dtest/**",
"Type": "dll",
"DLL": "DPlugin.dll",
"AppName":""
}
}

参数说明:
“Dir”: “dtest” 表示插件的目录,所有插件都在plugins目录下面,这里值为”test”代表插件在plugins目录下的test目录
“Method”:”Get;Post” 表示http调用的方法,可以为Get,Post,Any,Put,Delete中的一个或多个,多个以;分隔
“URL”: “/dtest/**” 表示响应以http://ip:port/pbtest开头的url。这里”/pbtest/**”可以响应http://127.0.0.1:5555/dtest/test.go,也可以响应http://127.0.0.1:5555/dtest/tttt.go等。如果设置为”URL”: “/pbtest/test.go”则只响应http://127.0.0.1:5555/pbtest/test.go
“Type”: “dll” 表示调用dll插件
“DLL”: “DPlugin.dll” 表示dll的名称
“AppName”:”” 不需要使用
2. 创建dll工程
建立dll这里就是不给出示例了,dll是标准的动态链接库,需要导出stdcall方式调用函数SatRDA_Service (注意:名称一定要是SatRDA_Service)
具体见示例

.net插件
修改plugins目录下config.cfg 增加一个项

1
2
3
4
5
6
7
8
"dnettest": {
"Dir": "dnettest",
"Method":"Get;Post",
"URL": "/dnet/**",
"Type": "dotnet",
"DLL": "DotNetDll.dll",
"AppName":"SatRDA.Plugin"
}

参数说明:
“Dir”: “dnettest” 表示插件的目录,所有插件都在plugins目录下面,这里值为”dnettest”代表插件在plugins目录下的test目录。
“Method”:”Get;Post” 表示http调用的方法,可以为Get,Post,Any,Put,Delete中的一个或多个,多个以;分隔
“URL”: “/dnet/**” 表示响应以http://ip:port/dnet开头的url。
“Type”: “dotnet” 表示是.net插件
“DLL”: “DotNetDll.dll” 是.net生成的dll
“AppName”:”SatRDA.Plugin” 表示SatRDA命名空间下面的Plugin类, 类必须有一个静态方法Service,当指定的连接到达时会调用到方法。

插件工程请看目录dotnet/DotNetDll下面的工程

Java插件
示例SatServer服务器是32位的,需要安装32位的Java运行库,或者拷备32位的Java运行库并配置环境变量JAVA_PATH指向安装路径如C:/Program Files/Java/jre6
在server/plugins目录下config.cfg 增加项

1
2
3
4
5
6
7
8
"java": {
"Dir": "java",
"Method":"Get;Post",
"URL": "/java/**",
"Type": "java",
"DLL": "",
"AppName":"com.satrda.Plugin"
}

参数说明:
“Dir”: “java” 表示插件所在的目录,所有插件都在plugins目录下面,这里值为”java”代表插件在plugins目录下的java目录。把源码打包成jar并放在这个目录下面,插件会自动加载目录下面所有的jar文件
“Method”:”Get;Post” 表示http调用的方法,可以为Get,Post,Any,Put,Delete中的一个或多个,多个以;分隔
“URL”: “/java/**” 表示响应以http://ip:port/java开头的url。
“Type”: “java” 表示是java插件
“DLL”: “” 保持为空
“AppName”:”com.satrda.Plugin” 表示com.satrda包下面的Plugin类, 类必须有一个静态方法Service,当指定的连接到达时会调用到方法。

插件源码请看目录java\plugin下面的插件示例

插件示例
在server目录下面提供了一个H5的插件开发示例,H5全部文件在myapp目录下面,运行satserver服务端后,在浏览器中输入http://127.0.0.1:5555/dtest/index,(修改127.0.0.1:5555为服务端ip)可以看到运行效果。
在手机浏览器中运行效果如下:

插件代码参考:

1
2
3
4
5
pb
pb\plugin_workspace
pb\plugin_for_pb125
delphi
delphi\plugin

消息推送
介绍
SATRDA支持消息推送,可用于实现即时提醒和客户端之间即时通讯。消息推送支持10M级并发。50个客户端并发连接免费。

PB使用示例
(pb10及以上转换示例后请导入示例文件夹中u_pushclient.sru对象)

1. 添加自定义u_pushclient对象到使用的窗口上,定义名称uo_client
2. 调用uo_client.of_start(as_server,as_topic)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* 启动PushClient,启动后可以接收或者推送消息,PushClient启动后会一直与服务器连接
* 如果服务器或者网络不可用,会一直尝试重连,直到Stop
* as_server 服务器地址 ip:port
* as_topics 启动后订阅的主题,多个主题以‘;’号分隔 topic1;topic2
*/
3. 在uo_client.的ue_msgevent事件中接收消息
4. 在uo_client.的ue_msgstate事件中判断当前的状态
/*状态改变事件
ai_state取值
constant int STATE_CLOSING = 0
constant int STATE_CLOSED = 1
constant int STATE_CONNECTING = 2
constant int STATE_OPEN = 3
*/

5. 在uo_client.的ue_msgerror事件中接收出错信息
6. 如果需要停止消息推送调用uo_client.of_stop

注:pb10即以上版本,请导入u_pushclient.sru

网页推送
可以通过Http Get方法进行推送,url如例

1
http://127.0.0.1:5555/pushmessage?topic=user1&message=11234234

topic表示主题
message表示要推送的消息

自动升级
通过satrda提供的免费升级组件可以完成自动升级,自动升级包括升级包生成工具和升级程序两部分。通过升级包工具上传升级包后,客户端可以自动检测到文件变化,文件和服务端不一致,可以自动进行更新。
升级相关程序在示例autoupdate文件中
升级工具

1. 把应用程序放到指定的文件夹,双击红框1位置,弹出框选择该文件夹,升级工具会检测该文件夹下的所有文件,并显示在列表中。
2. 双击红框2位置,选择升级包输出的文件夹
3. 填写上传地址,格式为http://ip:port,ip为服务器ip或者域名,port为服务器端口号
4. 应用程序名,最好以英文命名。假设应用名称为 test 最后上传的升级包会到服务器public/appupdate/test目录下面。
5. 填写版本号,主程序检查更新时会得到版本号,程序可以自己判断是否进行更新。
6. 双击列表的某项可以改变其属性,控制升级过程。除以下三个列表项,其它不需要修改。(运行项非常重要,至少选中一个可以运行的文件,否则升级后程序无法运行)
列表项 属性 说明
运行 是 升级完成后自动运行该文件
检查存在 是 选定文件只检测是否存在,不检测与服务端是否一致。如配置文件,客户端可能会修改,不必保持一致,只要存在就可以
COM注册 注册 升级完成后,对该com组件进行注册

7. 点击开始生成,生成安装包。安装包会输出到指定的输出目录中
8. 点击开始上传,会上传安装包到服务端目录。 public/appupdate/应用名称

升级程序
把SatUpdate.exe文件放到程序目录下面,在程序里调用SatRDA_CheckUpdate进行升级检测,检测结果会返回指定消息到窗口。见示例。

浏览器插件
SatRDA通过浏览器插件可以让CS程序直接在浏览器中运行。在浏览器中输入配置地址后,插件会自动下载上传的应用,并加载到浏览器中。
支持的浏览器
360、QQ、UC、猎豹、搜狐等浏览器
IE6-11
Chrome 40及以下
FireFox 40及以下

配置
打开server/webapp/config.cfg文件,文件内容如下:

1
2
3
4
5
6
7
8
{
"satrda": {
"App":"test",
"WindowClass": "",
"WindowName": "Untitled",
"Title":"SATRDA"
}
}

参数说明:
satrda 为应用的url地址
App为升级工具上传的应用名称
WindowClass 窗口的类名,可以通过spy++获取,用于窗口查找
WindowName 窗口标题,可以通过spy++获取,用于窗口查找
如果指定了窗口标题,组件将通过WindowClass和WindowName名称查找窗口,并自动加载指定窗口到浏览器中无需修改应用代码。
如果标题为空,组件不会自动加载窗口,可以在代码中使用SatWebApp_Attach手工加载,适用多个窗口加载。
Title 需要显示在浏览器标签中的名称。

浏览器加载应用程序

浏览器加载应用程序有两种方式,可以两种同时使用,也可以只使用其中一种。如果程序只有一个主窗口,那么使用第1种方式可以完成。如果是登录窗口然后运行主窗口,窗口之间有先后加载关系,使用第2种方式

1.自动加载窗口
窗口名称和标题可以通过spy++查找窗口功能得到,如图:

WindowClass对应类
WindowName对应标题
最后配置文件为
“WindowClass”: “FNWND390”,
“WindowName”: “Untitled”,
即可以自动加载,其中WindowClass可以留空
2.程序加载窗口
通过程序的命令行,可以得到webapp句柄如PB在Application的Open事件中:
gl_Web = long(commandline)
在主窗口Open事件中

1
2
if ( gl_web > 0 ) then
n_api.SatWebApp_Attach( gl_web, handle(this), 1)

end if
运行
配置好以后,运行satserver.exe,输入http://127.0.0.1:5555/satrda可以显示:

文件服务
SATRDA提供了文件上传下载功能,包括服务器和客户端的实现。

使用时请在satserver目录下面建立public文件夹,在public文件夹下建立自己目录的文件夹,如file。上传时,如果指定的路径不存在,支持自动创建路径。上传下载分别提供了同步和异步两种方式。异步方式会新开线程执行,执行过程中会收到进度消息,执行完成后,会收到完成消息。

上传文件
上传文件采用标准的http文件上传协议,第三方客户端可以按照提交表单file的方式进行调用。
url:http://127.0.0.1/upload/file.go

pb调用示例:

1
2
3
4
5
6
7
8
9
10
11
ls_path = "d:/ demo.zip"
ll_http = n_api.SATHTTP_Create()
n_api.SATHTTP_AddFormFile( ll_http, ls_path, "file/2.zip")
ll_rtn = n_api.SATHTTP_PostForm(ll_http,"http://127.0.0.1/upload/file.go")
n_api.SATHTTP_Destroy(ll_http)

if ll_rtn = 200 then
messagebox("","成功!")
else
messagebox("",ll_rtn)
end if

下载文件
下载文件使用http标准get 如url: http://127.0.0.1/file/1.zip
其中file为public下面建立的目录名
1.zip 为文件名

Pb示例

1
2
3
4
5
6
7
8
9
ll_http = n_api.SATHTTP_Create()
ll_rtn = n_api.SATHTTP_GetFile(ll_http,"http://127.0.0.1/file/1.zip","d:/111.zip")
n_api.SATHTTP_Destroy(ll_http)

if ll_rtn = 200 then
messagebox("","成功!")
else
messagebox("",ll_rtn)
end if

异步上传文件
调用SATHTTP_SetEventHwnd设备需要接收进度消息、完成消息的窗口或者控件,当有进度消息或执行完成时会发送相应的消息
调用SATHTTP_AsynPostForm方法,会自动开启线程,并上传文件。

Pb示例:

1
2
3
4
5
6
7
ulong ll_http
long ll_rtn

ll_http = n_api.SATHTTP_Create()
n_api.SATHTTP_SetEventHwnd(ll_http,handle(this))
n_api.SATHTTP_AddFormFile( ll_http, as_filepath, as_filename)
ll_rtn = n_api.SATHTTP_AsynPostForm(ll_http,as_url)

异步下载文件
调用SATHTTP_SetEventHwnd设备需要接收进度消息、完成消息的窗口或者控件,当有进度消息或执行完成时会发送相应的消息
调用SATHTTP_SATHTTP_AsynGetFile方法,会自动开启线程,并下载文件。

Pb示例:

1
2
3
4
5
6
long ll_rtn
ulong ll_http

ll_http = n_api.SATHTTP_Create()
n_api.SATHTTP_SetEventHwnd(ll_http,handle(this))
ll_rtn = n_api.SATHTTP_AsynGetFile(ll_http,as_url,as_path)

取文件信息
调用get http://127.0.0.1/file/info.go?file=文件路径
示例

1
http://127.0.0.1/file/info.go?file=file\2.zip

返回json

1
{"file":"file\\2.zip", "isdir":false, "modtime":"2016-06-16 14:23:36", "size":17 }

删除文件
调用post http://127.0.0.1/file/delete.go?file=文件路径
示例

1
http://127.0.0.1/file/delete.go?file=file\2.zip

Http调用接口
为了方便客户端与http交互, satrda.dll中提供了Http的get,post,postform等方法,具体使用请见demo

生成二维码
调用

1
get http://127.0.0.1:5555/api/createqrcode?qrcode=www.baidu.com&size=128

参数:qrcode 二维码值
size 生成的图片大小

支付宝支付
SATRDA将支付宝支付进行了封装,密钥和APPID等信息只需要放到服务器端,客户端不需要进行额外配置。
快速接入说明
Satrda支付宝支付请参考开放平台快速接入

1
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.FdzaRI&treeId=194&articleId=105170&docType=1

配置APP_ID
根据接入流程,创建APP_ID后,在server/config/alipay/aplipay.cfg文件中设置

1
2
3
4
{
"app_id": "2016080700190777",
"debug":true
}

debug为true使用支付宝沙箱,false为正式环境
生成RSA密钥
开发者密钥可以通过淘宝介绍的工具生成,也可以直接在线生成
http://web.chacuo.net/netrsakeypair

密钥配置
开发者应用私钥配置

1
server/config/alipay/ pri.key

支付宝公钥配置

1
server/config/alipay/ alipaypub.key

具体支付参考示例代码。示例界面如下:

常见问题
客户端连接不成功
1. 查看satserver.exe是否启动
2. 观察客户端点连接后,satserver命令行窗口是有日志输出
没有日志输出情况:
 用telnet测试服务端端口是否能够访问。方法:在命令窗口中输入telnet 127.0.0.1 5555 其中IP和端口号换成自己的,看是否正常连接。不正常请检查是否端口被防火墙限制了。
如果显示telnet命令不存在,请打开telnet服务,具体请百度。
 自己的程序启动后是否调用satodbc_install方法,某些电脑第一次运行时需要右键以管理员权限运行。

有日志输出情况:

查看日志,日志会输出配置的驱动返回的错误,根据情况进行调整。
 版本不匹配的情况

使用的satrda.dll和satserver不匹配,请确保版本一致。一般把原来下载的demo删掉,服务端和dll都用相同的版本就可以。

 连接名不对

请检索客户端的连接串DB_NAME的值是否和dbconfig中设置一致,这里不是数据库实际名称,如示例中是mycon1

3. 如果提示驱动不存在,请在odbc32位管理器建立DSN, 并测试连接正常,直接将dbconfig中的连接指定为DSN方式
如:”orcl”: {“DBType”: “odbc”,”Provider”: “DSN=dbt;uid=system;pwd=sql; “}

PB提示找不到dll文件
1.关掉工程,在当前目录打开工程(一般就可以了)
2.把整个project编译一遍
3.目录太深了,把目录放到根目录,不要有中文。

pb发布后连接不上
检查程序路径下面是否有pbodbxxx.dll,没有在pb安装目录下找出来加入。其中xxx是版本号,如pb9.0为pbodb90.dll
服务端64位Oracle客户端解决办法

1
http://blog.itpub.net/23135684/viewspace-717599/

SATRDA QQ群里下载instanceclient_11_2.rar可以直接配置连接

oracle乱码

1
http://blog.sina.com.cn/s/blog_6bccf0360100wr4p.html

Oracle Restful方式速度慢
Oracle 11G取参数信息比较慢,
解决办法:连接字符串中加入DBOwner信息,可以加快访问速度,注意用户名需要大写

Oracle describe(“DataWindow.Table.Select”)
得到的select语法可能不正确
解决办法:
有两种
1.在数据窗口data source里选择convert to syntax
2.安装oracle in instanceclient驱动

Oracle in instanceclinet驱动安装不上
群里下载oracle_instantclient_11_2.reg,记事本打开,修改里面dll路径为驱动对应路径后保存。
32位系统直接双击导入
64位系统运行 C:\Windows\SysWOW64\regedit.exe ,
然后再点击菜单“文件”-“导入”

浏览器插件delphi不显示在任务栏
在主窗口的create事件中写
SetWindowLong(application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);

浏览器插件在IE加载不成功
IE的设置 Intenet选项里切换到“高级”标签,把“启用增强保护模式”的勾去掉

Satserver.exe一闪而过
配置文件未正确设置,请在命令行窗口里面运行satserver,查看satserver的日志输出

MySQL连接时间长后断开

Odbc驱动选上Enable automatic reconnect

原文链接:https://xiaohost.com/3592.html,转载请注明出处。
0

评论0

请先