作者 内容
 henry_zhou   求教b/s结构系统如何实现访问客户端机器中的数据库!
 

本人现要做一个人事薪资管理系统,要求以web方式实现,能够在广域网上使
用,现在有一个问题:要求人事管理部分的数据存放在数据库服务器中,但员工薪资档案部分要求存放在一个客户端的本地机器上,可能使用access数据库,而且薪资档案数据库中的部分数据需要能够从人事管理数据库中进行复制(为了保持一致,但又无实时性要求),这样人事档案部分的数据存取通过中间层既可实现,但中间层好像无法对本地数据库进行操作,不知使用何种方法能够实现?望高手赐教,谢谢!

 02/07/24 16:41 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 idlecrook   什么中间层,你说的是中间件吗?怎么会不能对本地数据库进行操作呢?应该更方便才对呀!你是不是弄错了?
 
 02/07/25 08:16 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou  回复: 什么中间层,你说的是中间件吗?怎么会不能对本地数据库进行操作呢?应该更方便才对呀!你是不是弄错了?
 

是中间层,主要实现业务逻辑。对三层我的理解是客户端通过中间层获取数据
(因为它本身并不直接同数据库服务器打交道),如果要对客户端机器本地数
据库进行操作,也就可以理解为通过中间层对本地数据库操作,那么位于中间
层的那些程序如何访问客户端本地数据库呢?

可能我对三层的了解比较少,很多东西不是很清楚,请指教!

再请教中间件通过何种方式对客户端本地数据库进行操作的,谢谢!

 02/07/25 12:02 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 idlecrook   我明白你的意思了,直接操作就可以了(比如通过ado或者odbc),不需要别的了吧?也就是说服务器分两层。中间件跟这个没有关系
 
 02/07/25 15:40 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 diming  是否应该把“一个客户端的本地机器”当作第2个数据库服务器!
 
 02/07/25 15:54 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou  关键是如果在广域网上中间层的程序如何通过odbc之类的东西访问客户端机器,可能这台机器根本就不是直接连上网的(通过代理),即使在局域网中,如果另一个数据库所在机器经常变动,那是不是要经常去改连接配置呢
 
 02/07/25 17:35 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   局域网内可以这样处理,但如果机器一变(由于是客户端,可能用ACCESS数据库,因此换机器很正常)你就得改连接配置,这很麻烦;如果在广域网中,感觉你根本就不知道如何去配置数据库连接
 
 02/07/25 17:40 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 fjcx0000   需求是否能再明确一些
 

1、该客户端主机在系统内是否为个别。
如果是这样,我建议将该主机逻辑上承担两种角色(客户机、数据服务器)。这样可以保证前端程序一致性和数据操作权限控制。

 02/07/25 17:40 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 fjcx0000   回复: 局域网内可以这样处理,但如果机器一变(由于是客户端,可能用ACCESS数据库,因此换机器很正常)你就得改连接配置,这很麻烦;如果在广域网中,感觉你根本就不知道如何去配置数据库连接
 

如果不要求数据完全实时,是否可以专门做一个数据获取的客户端程序安装在该客户机上,由人工或系统定时向相应数据服务器进行数据采集。只是身份认证要求麻烦一些。

 02/07/25 17:46 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   回复: 需求是否能再明确一些
 

需求:大概是一个集团公司下有很多各分公司,或一个公司有很多个办事处,要求以web方式在广域网上实现人事薪资的集中管理,但要求薪资档案、每月的员工薪资情况不能放在统一的数据库服务其中,而放在各公司或办事处的会计所使用的计算机中

的确,该机器肯定只有一台。
如果是局域网,把该机器作为一个数据库服务器是可以解决问题,但是如果使用该机器的人员更换机器就麻烦了,每次还得记着修改中间层的数据库连接配置,感觉不是很理想。
如果是广域网我不知道中间层的程序能否找到它

 02/07/25 18:13 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   现在就是不想在每个客户端安装应用程序
 
 02/07/25 18:14 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 fjcx0000   回复: 现在就是不想在每个客户端安装应用程序
 

不想当作服务器,又不能安装应用程序,那只能通过Applet或Active控件方式下载到客户端对本地数据库进行操作,不过客户机的安全设置级别要求很低。可否?

 02/07/25 18:19 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   谢谢指点,还有点疑问能否解答?
 

这种方式我有一个疑问,就是下载到本地的话数据库配置文件是不是应该放到系统目录下,我如果要同时连接本地数据库和数据库服务器(因为有时候要进行数据的手工同步)怎么办?
applet是不是也可以像普通的客户端程序一样与应用服务器进行数据交换,如果直接通过applet连接数据库服务器和本地数据库进行两个数据库间的数据复制是否更好(不通过应用服务器),能否实现?
APPLET是不是只有在安全级别很低的时候才能对客户端本地文件进行读、写操作?

 02/07/25 19:16 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 idlecrook   回复: 关键是如果在广域网上中间层的程序如何通过odbc之类的东西访问客户端机器,可能这台机器根本就不是直接连上网的(通过代理),即使在局域网中,如果另一个数据库所在机器经常变动,那是不是要经常去改连接配置呢
 

如果这样你的应用就不是三层能够解决的问题了。在数据库上面再垫一层(你可以使用,dcom,corba等中间件,也可以不用)

 02/07/25 19:34 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   谢谢,但这就复杂了一点啦,我现在三层还没搞定,再搞这些有点吃不消
 
 02/07/25 21:53 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 idlecrook  其实三层也能搞定,让client什么逻辑都不处理,要不就牵扯到服务代理了,那会更麻烦
 
 02/07/26 08:08 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 crane_t   回复: 求教b/s结构系统如何实现访问客户端机器中的数据库!
 

大虾:
其实b/s的s不是僵化的概念。任何提供服务的端都可以叫s。按你的说法其实就没有客户端,用户是在一个服务端操作,并且数据库是分布的。不知我的说法你能否理解。
再有,为什么那么迷信b/s呢?很多好的mis都是c/s的。按你的说法,窃以为用c/s实现更好一些。

 02/07/26 08:32 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 sowen   看了这么多,我觉得这其实是一个非常简单的问题,是你想得太复杂了吧?这只是一个很普通的瘦客户三层结构的系统而已,你要考虑什么数据库连接,和换机器那些根本没有关系的事情干什么?
 

直接按需要做服务端的逻辑层,然后根据数据读写的需要做一个数据层,连接那个只是小问题,做一个设置文件就可以灵活变化,最后根据客户端的傻B程度做一个友好的应用层,就可以交货了。

不管什么广域,局域,什么数据库变动,你想得实在太多了。就这么做够了

 02/07/26 08:44 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 newdongkui   两种方法
 

两种方法.

可以考虑web service 的体系结构形式.借助XML/SOAP来解决.

考虑一下,建立数据库层的分布式连接,在你的三层结构中,不要考虑数据分布问题.

 02/07/26 08:50 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 sowen   太夸张了,这根本不是需要web service的那种业务,这只是非常普通的HR系统,每天都不知道有多少小软件公司在重复的开发这种东西
 
 02/07/26 08:54 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   老兄,我一个数据库在客户机中,我怎么去写连接配置让服务器端的程序使用(当然局域网肯定没问题)?
 
 02/07/26 12:44 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   我现在的案子是有至少好几十个点(不在一起)要使用,做c/s安装推广就够受的
 
 02/07/26 12:48 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 sowen   这种情况就当然不能用ACCESS啦,用SQL或者ORACLE不就没问题了吗?管数据库放在什么地方干什么?只要那台机器在网上就可以啦
 
 02/07/26 14:15 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   非常感谢各位,我要先看看有关资料消化消化!
 
 02/07/26 14:25 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   我知道只要一台机器连在网上就能找到他,但我一直不明白一台机器如果没有分配固定的ip(非局域网内的),且可能通过代理上的网,如何找到他,谢谢赐教!
 
 02/07/26 14:29 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 sowen   这样算怎样?我觉得一个系统实现一定功能就必须要有一个特定的环境,我感觉你的需求跟你的实现环境根本不成立哦。
 
 02/07/28 11:31 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 54xx   做成B/S结构!采用签名的ActiveX或要求客户端设置IE的安全属性。
 

AvciveX可以方面的操作客户端的数据库,可以要求数据库放在一特定目录,或让AvciveX去自行搜索!
AvciveX也可按指定的IP地值直接联结(ado)远程数据库,或将数据post到你的中间层,有中间层进行数据的存取。

您认为可行否?

 02/07/29 09:17 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   回复: 做成B/S结构!采用签名的ActiveX或要求客户端设置IE的安全属性。
 

在广域网上从安全性角度来说数据库服务器可能不是直接挂在网上的,因此通过客户端可能无法实现通过指定ip地址来访问数据库服务器。
将数据post到中间层,我不知道activeX具体如何实现对中间层数据的处理,能否讲的详细点?
是否用applet也可以实现activeX的工作?

 02/07/29 10:21 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 BirdGu   只能说是奇怪的要求。
 

既然是集中控制的人事薪资管理系统,为什么要把数据放在下属部门呢?
谁会访问、使用这些数据?如果只有各下属部门、子公司自己使用,为什么要用集中式的系统和B/S架构?
如果有不同部门使用,又为什么要把数据分散?
这样分散的数据和B/S架构是不相容的。
两个选择:
1. 数据集中,所有的数据都集中在公司总部。
2. 各分公司、办事处使用C/S架构的应用,开发数据上传软件,把必要的数据上传公司总部。
B/S架构确实可以避免安装客户端软件,减少维护工作。但如果把数据库放在客户端,这个好处也就被抵消了。
如果是Access,中间件通过广域网访问的可能性几乎为0。

 02/07/29 11:25 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 henry_zhou   的确是个很怪的要求,但没办法,谁让咱自己不是老板呢!
 
 02/07/29 12:22 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 BirdGu  这个要求在技术上基本是不可实现的。
 
 02/07/29 13:41 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 fjcx0000   回复: 谢谢指点,还有点疑问能否解答?
 

非常抱歉,我只是知道一些原理,具体实现未做过,所以无法回答你的问题。

 02/07/29 20:30 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 54xx  回复: 做成B/S结构!采用签名的ActiveX或要求客户端设置IE的安全属性。
 

比如说内地数据库是不能直接访问的,那么你可以有个中间层,如果需求简单的话搞个app server就行了,如果用servlet的话,你就写个入口函数,专门处理post来的数据,基本上采用xml的方式比较易懂。如你的客户端要提交数据如

1xx
.....将这个xml以字符串的方式post到中间层,中间层解析并调用中间层的其他相应的数据库操作类来进行相应的处理。至于取也就是个逆过程。至于applet签名的应该是可以的,至于安全设置怎么设,我不是很清楚。
 02/07/30 09:27 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 daxiake   这是谁的需求,我想踹他一脚:(
 
 02/07/30 09:36 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 daxiake   这个方案不太可取,你不能总去该安全级别吧,我试过,最好不要再客户段做操作:(
 
 02/07/30 09:38 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 mileswang  B/S也不是万能的,有些时候需要把B/S和C/S结合起来使用
 

一般来讲,B/S结构的特点就是便于维护,但在客户端需要有复杂的本地磁盘读取操作的,虽然可以用ActiveX之类的技术实现,但涉及安全性问题。我觉得还是用C/S更好。象你这样的需求,其实还是要涉及客户端数据库维护的问题,与其用B/S,还不如用C/S。对特殊的有限的用户,提供一些C/S工具也未尝不可。

 02/07/30 10:17 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 Ankh   回复: 做成B/S结构!采用签名的ActiveX或要求客户端设置IE的安全属性。
 

制作一个ActiveX控件,用他访问客户机的数据库,然后将数据传递给业务逻辑,业务逻辑(中间层)去更新中心数据库,这难道不是完整的三层结构?

 02/07/30 12:03 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 54xx   回复: 这个方案不太可取,你不能总去该安全级别吧,我试过,最好不要再客户段做操作:(
 

您说得很对,B/S结构其实初衷是用户不需要动任何东西(包括安装),但是你需要操作本地的文件、数据的话只能这样做了。而且安全设置只要将activex下载安装后,就可以改回去了。当然,用签名的话就没有这个问题了!

 02/07/30 17:35 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首