导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
2021/4/21 11:09:51
标题:
加入我的收藏
楼主:
手头有个小软件,公司用,公司办公跟生产基地不在同一个地方,这个软件2个地方的人都要用,内容不多,数据也没有保密的必要,所以就打算把数据放服务器,再写个客户端进行远程访问操作。问题如下: 1. 我怎么判断数据库连接正常,是不是每次操作数据库前都要判断一下?还是用一个定时器,间隔时间访问一下数据库,成功则表示连接正常? 2. 访问数据库表的时候,如果我要修改或增加信息该怎么操作,特别是修改数据,怎么控制避免产生脏数据之类的操作。 谢谢!
----------------------------------------------
-
作者:
2021/4/21 12:23:26
1楼:
数据库是微软的sqlserver 用ado控件 ADOConnection和ADOQuery,不会此控件就百度一下 ADOQuery写查询sql语句开打数据库后,用ADOQuery的方法append edit delete新增 修改 删除提交操作。 脏数据自己写逻辑判断
----------------------------------------------
123
作者:
2021/4/22 9:15:29
2楼:
数据库都是长连接,长连接在连接断开的时候基本都能知道。 但是你这个要走公网,要考虑网路问题。最好的方案是走http协议,把功能封装在服务器,客户机用http请求的方式来请求数据。 或者嫌麻烦那就用短连接的模式,就是要用到数据的时候才连接服务器,与数据库交互完毕就立刻断开连接。这样的做法是考虑到很多网络环境,交换机会强制断开一段时间内没有数据交互的网络连接。如果直接按局域网那种做法的话,那程序健壮性太次了。
----------------------------------------------
--
作者:
yy306 (yy306)
▲▲▲▲△
-
普通会员
2021/4/22 10:34:09
3楼:
建议楼主直接安装一个远程控制软件(Teamview、anydesk、todesk等),连接到本地操作。省时省力。
----------------------------------------------
-
作者:
dmzn (dmzn)
★☆☆☆☆
-
盒子活跃会员
2021/4/22 10:47:26
3楼:
如果是新开发,可以考虑uniGUI直接写成Web模式,与开发client区别不大,公司部署,其它地方都能访问.好处是不用暴露数据库,升级也简单. 如果是现有胖客户端软件,那我回答一下你的两个疑问: 1.数据库连接是底层驱动处理的,你根本不需要关心.假如是要处理断线重连的话,可以用以下方法:伪代码 var nCounter: Integer begin nCounter := 0; //计次数 while nCounter < 2 do try if nCounter = 1 then //第一次查询失败后 begin DoQuery('Select 1'); //执行一个简单查询,判断链路是否正常 end else if nCounter = 2 then //第二次查询失败(一般是链路断开引起) begin DoDisconnect; //断开链路 doConnect; //重新连接 end; DoQuery; //执行查询 except Inc(nCounter); //累计错误次数 end; 2.如果写入数据库的记录是单笔,则不存在写脏,因为成功/不成功是原子操作;如果是多笔,记得开数据库事务. beginTrans; try WriteDB; CommitTrans;//提交写入 except Rollback; //出错回滚 end;
----------------------------------------------
生活愉快.
作者:
2021/4/22 23:25:05
4楼:
uniGUI,很想用,没有教程基本都死在沙滩上。
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
2021/4/23 16:45:33
5楼:
如果是新做,可以考虑上 DataSnap 多层。 通过互联网直接连接数据库, 也是可以的。
----------------------------------------------
-
作者:
2021/4/23 19:25:54
6楼:
数据库中间件不就是干这个的吗?
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
2021/5/11 9:12:50
7楼:
首先谢谢楼上的各位朋友,谢谢! 其次这个软件我一个人做,只是作为一个工具用,使用频率不高,偶尔用一下,因为今年还有一个比较复杂的项目要做,我想抓紧把这个结束,所以才想用2层C/S方式,数据不存在加不加密,也就没考虑用中间件。
----------------------------------------------
-
作者:
2021/5/11 10:06:42
8楼:
有公网IP吗?还是搞动态域名?还是弄VPN? 为什么用c/s呢. 这情况适合用b/s.
----------------------------------------------
恭喜发财
作者:
2021/5/11 10:15:23
9楼:
用的不频繁的话,C/S也行, 远程连接sql和局域网一样啊.地址使用 www.xxxxxxx.com,3433 这样,当然你得申请个动态域名,还得在路由器上做端口映射. 比如: adoconnection1.Connected:=false; adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=abcd1234'+';Data Source=ekifap3956.cnvpn.org,3433;Initial Catalog=DB001;connect.LoginPrompt:=False'; adoconnection1.Connected:=true; 不用定时器,就和局域网一样,局域网你怎么获取连接状态的? 操作数据库前判断一下啊, if not adoconnection1.Connected then adoconnection1.Connected:=true; 推荐用UNIDAC,别用ADO,更好用,简单设置一下就可以自动断线重联! 我用动态域名连接sqlserver用过,还是很稳定的.
----------------------------------------------
恭喜发财
作者:
2021/5/12 20:39:24
0楼:
b/s吧,开浏览器即可操作。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
2021/7/7 22:04:00
10楼:
有远程服务器地址和端品,也有用户名和密码,如何通过DLL 来达到数据发送和结果返回?
----------------------------------------------
实在舍不得丢下delphi