VB程序两层C/S转三层

很多朋友肯定遇到过这样的需求,以前开发的老程序,采用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 strSQL
End 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个小时。

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








文档,原程序,安装程序,模型等很齐全 connie’s store系统软件需求说明书 1 引言   随着信息产业的出现和网络的普及,计算机的应用已普及到人类社会的每一个角落,它与人类的生活关系越来越密切。超市在我们的生活中充当了相当重要的角色,使超市的销售信息化自动化是当前超市系统所面临的一大难题。通过connie’s store系统软件,会使收银员更方便,更快捷的销售,从而提高工作效率.,使顾客更快捷地获得商品。 1.1 编写目的   a. 本说明的编写目的在于研究connie’s store系统软件在技术方面的具体需求,指出实现本软件功能的方法与途径。为后来的设计工作做好充分准备。   b. 本软件的预期读者是周炎晖老师及课题开发小组。  1.2 背景及范围   a. 本项目的名称为connie’s store系统的开发。   b. 本产品能帮助收银员更快地完成一次销售,并能使我们了解vb程序设计语言的优越性。   c. 本connie’s store系统软件的应用   本软件使用户了解了vb程序设计语言的优越性,其扩展性,可移植性和伸缩性都很强,能在已有的基础上不断完善。  1.3 定义术语   a. vb程序设计语言   是一种通用的计算机程序设计语言。   b. connie’s store系统软件   为了帮助收银员尽快熟悉销售从而达到更快地完成销售的目的而开发的销售软件。  1.4 参考资料     <>        <> <>  2 项目概述   市场上的connie’s store系统软件已具有比较完善的技术,但本软件采用了具有创新思维的vb程序设计语言,它将复杂的程序设计语言简单化,直观化,是一种通用的计算机程序设计语言。通过开展此工程,培养我们的团体协作意识和软件工程思想,同时在程序设计上也得到锻炼和提高。 2.1目标   2.1.1 开发意图 通过将信息放入数据库,实现调用数据库,实现vb编程与数据库的互动。使我们近一步掌握程序设计语言开发软件技术,培养我们的软件工程设计思想。 2.1.2 应用目标   connie’s store系统软件能使收银员快速的熟悉整个销售过程提高效率。同时通过本软件对vb编程语言作更进一步的推广。   2.1.3 作用及范围 本connie’s store系统软件适用于中小型的超市。 2.1.4 背景   本产品是采用vb程序设计语言开发,在WINDOWS环境下运行的软件。  2.2 产品描述   本产品是一项基于vb编程的产品,是以vb编程技术为核心,用vb程序设计语言进行开发的产品。   2.2.1 相关关系   本产品为独立软件,全部内容自含.  2.3 产品功能   2.3.1 内部功能   本软件的内部功能主要为实现了vb程序设计语言与数据库的结合,以及部分API函数的调用。   2.3.2 外部功能 本软件具有外部功能包括以下几个内容: (1)销售管理:对超市的整个销售过程进行管理,包括收银员的登陆,商品的信息输入,商品的出售,以及购买信息的输出和销售信息的入库。 (2)退货管理:对顾客购买的损坏货物的退还处理,包括退还货物信息的输入,对货物信息的核对以及货物的入库。 (3)收银员登陆:收银员用自己获得的帐号和密码登陆系统。  2.3.3 功能描述表 收银员用自己获得的帐号和密码登陆系统,系统随即调用数据库检查其有效性,若正确则进入销售页面进行商品销售.当用户购买商品时收银员通过扫描商品键入信息并调用数据库进行一次销售,当一次销售完毕收银员按键将进入下一次销售.其另一个功能是当商品出现问题时,客户凭小票退还商品,收银员将把退还的商品调入数据库的相应的表中. 2.4 用户特点 一般的小型超市收银员。   1. 要求对微软Windows界面比较熟悉,能熟悉上网基本操作。 2. 为了确保客户和酒店的信息具有更好的安全性,前台管理和后台管理是分离的。前台的管理模块需要经过权限授权才可以使用,我们为此设计了的收银员角色必须能进入系统的帐号和密码。至于帐号和密码的获得得从超市系统的另一个子系统获得,在这里我们做了一定的假设  2.5假定和约束 假定系统输入商品是在实际中是通过扫描进去的.假定后台的管理系统已经存在并且已经在数据库中添加了一定的收银员。 约束:计算机配置486以上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值