这个三层应该如何做?(300分)

  • 主题发起人 主题发起人 honestman
  • 开始时间 开始时间
H

honestman

Unregistered / Unconfirmed
GUEST, unregistred user!
这里有两个网络甲和乙(内部网),其中有N台机,乙A是SQL SERVER数据库,乙B连着
甲和乙两个网。现在需要每天从甲网的甲A、甲B、甲C等机把本地的mdb文件的记录保存
到数据库。用SocketConnection,应该如何实现呢?
原来的做法是:B接一个网卡连乙网,用一只猫连甲网。每天甲A、甲B、甲C等机用
PCANYWHERE,把文件传到乙B。由乙B中的程序自动把数据写到数据库中。
但是这种方法好象比较落后,我想用三层来实现这个过程。在乙B中起中间层服务器。
这样,究竟中间层和客户端应该怎么设计呢?
是把文件传到中间层再处理?还是在客户端读乙A数据库中的数据,再判断是INSERT,
还是用UPDATE呢?
另外,由于中间层是无状态的,中间层怎么才知道某次提交数据的客户端是合法的呢?
 
在局域网中用C/S的三层来作,
走Internet的就B/S三层来作,
C/S和B/S都共用一个中间层,和数据库服务器,
把业务逻辑全写在中间层上,
这样,就没什么了。
 
to 程云:
  这些我也知道,两个网络都是C/S的三层来作。问题是就我的问题应该怎样做啊?
 
三层结构的话
很简单的
你在乙B上作一个服务端。SERVER
甲网的作客户端CLIENT
server需要一个远程datamoudle 上面要有adoconnection adoquery
datasetprovider,把这几个关联起来。
客户端放个clientdataset 连接到服务器
mdb的数据通过clientdataset传递到数据库
建议你看看delphi5 例子目录下的midas目录下的例子


 
我建议:
  把乙B机器做成WEB,WEB程序访问乙A完成数据操作,甲网的所有机器通过访问
乙B网站做业务。试试吧,用PHP来写数据管理程序,你将发现比Delphi更顺手。
 
大家不要说得太复杂,我只是想知道如何把MDB数据库的内容,保存到SQL SERVER数据库中。
就是这么简单,没有其他的。
 
TMD,DFW的这个输入框居然不能UNDO,一不小心按了个ESC就全没了,气死我了。
只好重输
在乙B上放一RemoteDataModule做的中间服务器,连接到乙A数据库。
甲A/B/C上放一远程连接,DCOMConnection或SocketConnection连接到乙B
和一个ADOConnection,连接到MDB文件即可,这样就可以在甲A/B/C中用程序把数据
从MDB直接导到乙A里了。
 
我用:
clientdatasetc.Insert;
clientdatasetc.FieldByName('id').asstring :=trim(adoq_main.fieldbyname('id').asstring);
clientdatasetc.FieldByName('acceptTime').value :=trim(adoq_main.fieldbyname('acceptTime').value);
clientdatasetc.Post;
clientdatasetc.ApplyUpdates(0);
但是,却显示:
2001-11-4 17:51:14 更新:列名 'EAA010611001' 无效。
ResolveToDataSet已经是True了。
为什么会这样?另外,有没有简单的方法把整个数据集提交上去,由中间层判断哪些是INSERT,哪些应该UPDATE啊?
 
Trim只能对字符型的变量才能使用
你试试
trim(adoq_main.fieldbyname('acceptTime').asString);
 
“2001-11-4 17:51:14 更新:列名 'EAA010611001' 无效。”的问题已经解决了。
剩下的就是有没有简单的方法把整个数据集提交上去,由中间层判断哪些是INSERT,
哪些应该UPDATE啊?
 
多人接受答案了。
 
后退
顶部