VB程序两层C/S转三层

来源:互联网 发布:匡恩网络 知乎 编辑:程序博客网 时间:2024/05/19 16:23

很多朋友肯定遇到过这样的需求,以前开发的老程序,采用CS架构,客户端直接连接数据库,这样的程序在很长一段时间内占据了主流。程序在客户的局域网里面一直运行良好。突然有一天,客户说我要开分店了,我的分店能不能使用这个软件和总店连接?我经常在外面,你的软件在外网上能不能操作和进行报表查看?好吧,客户是上帝(神马人民币?)于是乎,开始忙碌。。。

最先想到工作量最少,那么把数据库迁移到外网,程序直接访问外网数据库。看起来不错,但是数据库暴露在互联网上,心里总感觉有点不踏实,
好吧,不管了,先满足需要吧,客户又不知道,还有谁没事去攻击这个呢。。。。说服自己后开始干了,很快完成了。配置一下就行,确实方便
几乎不用改什么,可是一测试,泥马,速度怎么比局域网慢这么多,自己都接受不了,怎么给客户?
没办法开始改方案,自己建个服务器,把业务逻辑分离出来移到服务器上,服务器和客户端使用指定协议进行交互。服务器开发用什么语言?服务器
稳定吗?怎么和客户端交互?大数据量能不能抗得住?很多客户连接会不会有问题?。。。一堆问题,费了不少脑细胞终于想通了,可是程序好几十个模块,

怎么分离,要多久,修改之后稳定吗,hold不住了。

好吧,我承认,前面的场景都是为了引出我们的主角SATRDA, 这样的场景确实是我经历过后才有了SATRDA这个组件。我就不多介绍了,

下载地址:

http://download.csdn.net/detail/pcwe2002/9690008

最新版本下载,交流请到QQ群:345559891 

包括PB,delphi,VB示例。大家可以下载后看说明:)

附一个和两层的速度对比,

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

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



下面进行主题。

为了演示,我从网上搜了一个两层的VB超市管理系统,后台数据库是sqlserver

下载地址:

http://www.codesky.net/showhtml/7122.htm


解压后,发现运气不错,还有说明,按照说明用他的工具把数据库建立起来了(挺方便,赞一下)。
找开后台管理文件夹,按说明注册了控件。
打开SuperMarket.vbp,点运行出现了登录界面


看来能运行,不过数据连接没改,肯定连不上数据库,退出来,看看代码。登录窗口很好找,一看名称frmLogin肯定是你了,

找到确定按钮的代码,发现了连接函数sqlConnect, 把连接串改成我的数据库,再进入,输入密码admin, 进去了,看界面还不错,点几个界面操作了下,也正常。


程序没问题,好,那我们进入主题,看看如何改成三层的。(我们先假设你已经看过了SATRDA的说明)

1.打开SATRDA的Server文件夹,用文本编辑器打开dbconfig文件,我使用的notepad++,比notepad格式看起来好些,看起来像这样

{"mssql": {"DBType": "odbc","Provider": "driver=sql server native client 10.0;server=X6P2J80LPMLFALP\\SQLEXPRESS;uid=dbuser;pwd=sql;database=test"},"orcl": {"DBType": "odbc","Provider": "driver=Oracle in OraDb10g_home1;SERVER=ORCL;uid=system;pwd=sql;EXC=T"},"mytest": {"DBType": "sqlite","Provider": "dbname=ccc"}}

因为用的sqlserver数据库,我复制一个mssql,修改后像这样

{"mssql": {"DBType": "odbc","Provider": "driver=sql server native client 10.0;server=X6P2J80LPMLFALP\\SQLEXPRESS;uid=dbuser;pwd=sql;database=test"},"marketdb": {"DBType": "odbc","Provider": "driver=sql server native client 10.0;server=X6P2J80LPMLFALP\\SQLEXPRESS;uid=dbuser;pwd=sql;database=SuperMarketdb;"},"orcl": {"DBType": "odbc","Provider": "driver=Oracle in OraDb10g_home1;SERVER=ORCL;uid=system;pwd=sql;EXC=T"},"mytest": {"DBType": "sqlite","Provider": "dbname=ccc"}}

2. 运行satserver.exe, 如果成功,那么恭喜你。有可能看到界面闪了一下,就不见,那么就是端口号被占用了,打开config文件

{"TAG": "QQ:9091178","Port": 80,"Log": 0,"SecrectKey":""}

修改"Port": 80中80为任意合法端口号。再运行,那么你可以看到这个界面


3. 把示例中的satrda.dll,libcurl.dll,zlib1.dll三个dll,拷到工程目录下面, 增加一个函数

Function boolean SATODBC_Install(boolean quiet) library "satrda.dll"

该函数的作用是注册驱动,可以在程序开头调用,进行驱动的自动注册(多次调用不会重复注册)。

如果驱动正常注册后打开odbc数据源管理器,可以找到下图的驱动


4. 回到VB工程修改sqlconnect函数为

'连接SQL服务器Public Function sqlConnect(ByVal cnThis As ADODB.Connection, ByVal strServer As String, ByVal strUser As String, ByVal strPass As String, Optional ByVal strDataBase As String = "")    Dim strSQL As String    Dim server As String, db As String        server = "127.0.0.1:5555"    db = "marketdb"    '生成连接字符串    'strSQL = "provider=sqloledb;server=" & strServer & ";user id=" & strUser & ";password=" & strPass    strSQL = "Provider=MSDASQL.1;Password=sql;User ID=dbuser;Extended Properties=""driver=Smart ODBC Driver;server=" & server & ";DB_NAME=" & db & ";"""    cnThis.CursorLocation = adUseClient     '注意,必须使用adUseClient    cnThis.Open strSQLEnd Function


这里一定要有,

CursorLocation = adUseClient 

不然运行后出会现如下错误:

主要是recordset如果使用PageSize等属性时,需要指定为客户端游标。 在创建rs时,加上属性rs.CursorLocation = adUseClient也行。

登录后,正常进入主界面。点进货管理,又出现


看代码是因为用到了报表,指定的报表数据源与现有的不同,打开DataEnv1,修改Connection1属性ConnectionSource为

Provider=MSDASQL.1;Password=sql;User ID=dbuser;Extended Properties="driver=Smart ODBC Driver;server=127.0.0.1:5555;DB_NAME=marketdb;"

修改后运行正常了。


试着点其它功能,都没有问题了。到这里,原来的两层,成功转成三层,用时,不到1个小时。

服务器放到阿里云上试试,速度杠杠的。








0 0
原创粉丝点击