开发一个系统:本地用ACCESS,远程用SQLSERVER.用ADO控件.1.程序中,如何在连接不上SQLSERVRE时,如网断或是其他情况时能够得知.用什么事件???这个是c/s程序都应该考虑的问题,不知道大家怎么处理网络不通的情况.2.对事务的概念有所模糊.事务它应该是对一个ADOConnection的吧?我用一个Adoconnection连接数据库,然后,有三个ADoquery连接上该Adoconnection,这三个Adoquery在执行时是作为一个单位进行处理的吗?一起成功,一起失败?3.在一个5000左右的表中查询一个记录,用什么方法比较快些?新手,做项目遇到这些问题,单位不好上网,希望大侠指点.
function TE_databasef.InternetConnected: boolean;
{const
// local system uses a modem to connect to the internet. 拨号上网,ADSL
internet_connection_modem=1;
// local system uses a local area network to connect to the internet. 通过局域网
internet_connection_lan=2;
// local system uses a proxy server to connect to the internet. 代理服务器
internet_connection_proxy=4;
// local system uese a modem is busy with a non-internet connection. 无网络连接
internet_connection_modem_busy=8; }
var
dwconnectiontypes : integer;
begin
dwconnectiontypes:=INTERNET_CONNECTION_MODEM +INTERNET_CONNECTION_PROXY;
if (InternetGetConnectedState(@dwconnectiontypes, 0) = False) then
Result := False
else
Result := True;
end;
需要注意的是,如果在再上局域网internet_connection_lan连接的方式则有可能出错,因为局域网很不稳定,可能第一次时能正确判断是否有连网,但如果把网线拨了再插,就有可能判断不正确了,最好还是用indy的网络控件.不过我也不太会用,这是比较简单的方法,注意,只检验物理连接!
第二,应该不会向你说的那样一起成功或是失败,只要adoconnection连接正常,就不会出错(其实我不太明白LZ用到的是什么事务~~嘿~)
至于第三~~~我也不太懂~
2. adoconnection1.BeginTrans
遇到
adoconnection1.RollbackTrans
或adoconnection1.committrans
就是一个事务过程
3.5000左右,不多吧,不过要有索引,select 就行了;如果要全部select到本地的话不提倡,一次显示的时候少取些.
try
ADOConnection.Connect:=true;
except
//切换连接到access
end;
来判断是否能连接SQL SERVER,不行就切换到access。
2.事务:
ADOConnection.BeginTrans//开始进入事务
{之间所有代码均处于事务当中}
ADOConnection.RollbackTrans取消事务 or ADOConnection.CommitTrans提交事务
ADOConnection.BeginTrans//开始另外一个事务.......
3.
5000笔记录的表,直接下SQL就可以了吧
2.3个query可以单独处理 也可以一起处理
3.直接用SQL处理 如果有index更快
我这只是提供个参考意见.
搂主可以使用TIdICMPClient组件定时监测网络的通断,如果不通可以触发对应的世界.
IdIcmpClient1.Ping();在它的reply里面判断是否ping成功,一般如果网络通,sqlserver都能连上。第二个问题很模糊,一起成功,一起失败是什么意思?第三个问题,用adoquery就可以查,我曾经查过几万条记录中的,速度也不慢。
一般都是用写一个函数,返回是否为true,如果不为true,就表示网络断开,然后尝试连接.2.对事务的概念有所模糊.事务它应该是对一个ADOConnection的吧?我用一个Adoconnection连接数据库,然后,有三个ADoquery连接上该Adoconnection,这三个Adoquery在执行时是作为一个单位进行处理的吗?一起成功,一起失败?如果对事务不是很清楚,建议去google下,你就会很清楚了
http://www.51one.net/study/Delphi/40458.html
3.在一个5000左右的表中查询一个记录,用什么方法比较快些?一般建立索引,查询速度会提升;
1。该系统是工厂内的运转的一套系统,希望是网通时正常工作,网断则保存在本地等网断时在上传到服务器上去。
用ping似乎也不太好吧,因为ping通不代表就一定能连上数据库服务器;
用try except的确似乎反映太迟钝。
也不能总是在数据处理之前都要ADOConnection.Connect:=true;吧,我是在程序启动的时候
connect一次,而不是每次都是要connect,不知道我这样是不是正确。
2。只要是用一个Adoconnection,就是在一个事务之内。
一个Adoquery1操作A表,一个Adoquery2操作B表,一个Adoquery3操作C表,可以最为一个事物一起提交成功,失败吗?
2. 好象是单独不相关的吧,A,B,C可以单独成功。看程序执行顺序了
3. 5000的记录算很少了,如果有索引的话,下SQL语句很快的。小弟才学,比较菜,报着学习的态度来回答问题。