一系统是数据库采用sqlserer,为的是多用户操作!数据的添加用asp方式实现的,在添加数据完成后,回到程序主界面,我并没有实时的显示添加的数据,用户必须更新数据才能显示出添加的数据,其实这个更新数据想法很简单,只是进行数据库的重连接一次,打开adotable一次,因为我的查询为渐进查询,所以必须取得所有的数据,现在有三个疑问处请高手帮助讨论或者解决给点意见或者代码,先谢谢了!
第一:更新数据除了打开adotable之外还有什么更好的办法实现我上述的功能,可以是用户添加数据后就可以看到添加的信息就是实时显示信息!请给点意见或者代码!
第二:如果用我的那种方法打开adotable一次取数据,在更新当中,如果是意外服务器关闭的话,程序将抛出异常,这个异常信息我试图捕获但是没有成功过的,因为adoconnection根本找不到服务器,所以
 if Not adoConnection,connected then
  //给出错误信息
根本不行,我试图用这种方法解决:
  Try
    AdoConnection.Connected:=False;
    AdoConnection.ConnectionString:=AppSet.ConnectStr //Appset为我的一个全局函数
    AdoConnection.Connected:=True;
   Except
  On E:Exception  Do
  begin
   if Not AdoConnection.Connected do 
   //给出错误信息
  end;
也有点问题,因为我试图取得数据的连接时候,如果连接成功,我将打开adotable的,就是对数据表的更新了啊。所以我就把那些代码进行嵌套到上面中,如果关闭服务器,将出现两个提示信息,就是更新成功和不能连接到服务器,很迷惑!请高手给予解决!
第三:在第二个疑问中,我想到一种方法,但是缺少支持还不是很成熟,希望高手您给点帮助,大致是这样:在程序启动的时候(当然已经是取得数据库的连接,如果不能连接,将让用户进行重连接),我用AdoTable的SaveToFile函数把数据转换成一个xml文件,当更新不成功的时候,告诉用户现在使用的是离线数据,也就是还可以支持用户的查询,但是使用的是本地数据,也可以对数据进行更新删除或者添加等一些基本的操作,但是这些操作的结果都将保存到哪个xml文件中,用户即将关闭程序时候告诉用户需要把本地的数据送往服务器中进行更新数据库的信息。就是这样一个环节。这个环节中需要解决如下问题:1 数据保存成xml文件(函数可以实现)2:更新不成功的时候告诉用户并把adotable使用的数据用函数LoadFromFile()实现,还可以让表格中显示所有数据3 :用户对数据的操作如删除添加更新信息也要保存到本地的xml中,这一点我没有想到解决办法,请指点!4:退出程序的时候需要把本地的xml文件发送到服务器端,又怎么实现啊,也就是把xml数据复制到sqlserver中,也没有想到解决办法,请给予支持!5:添加数据的时候我是用asp那种的,怎么把asp添加的数据添加到本地的xml中啊,迷糊,请指点!

解决方案 »

  1.   

    也有点问题,因为我试图取得数据的连接时候,如果连接成功,我将打开adotable的,就是对数据表的更新了啊。所以我就把那些代码进行嵌套到上面中,如果关闭服务器,将出现两个提示信息,就是更新成功和不能连接到服务器,很迷惑!请高手给予解决!  更新成功了为什么不连到服务器?
      

  2.   

    我是把Try进行嵌套了啊
     if FileExists(ExtractFilePath(Application.ExeName) + 'CpApp.ini') then
      begin
       uGlobal.DoBusy(true);
       try
          try
           DMMain.ADOConnection.Connected :=False;
           DMMain.ADOConnection.ConnectionString:=AppSet.ConnectStr;
           DmMain.ADOConnection.Connected :=True;
           //
           DmMain.NameList_Table.Active :=False;
           DmMain.NameList_Table.Connection:=Dmmain.ADOConnection;
           DmMain.NameList_Table.TableName :='NameList';
           DmMain.NameList_Table.Active :=True;
           //
           DMMain.NameList_Table.Refresh;
           tvnamelist.DataController.UpdateData;
           Finally
           uGlobal.DoBusy(False);
           tvNameList.ApplyBestFit();
           MyMessage('提示:','数据更新完成!');
           end;
           
          Except
          on E:Exception do
           begin
             if Not DMMain.ADOConnection.Connected then
              MyMessage('错误:','对不起,程序无法连接到数据库服务器!');
           end;
          end;//try       
      end
      else
      MyMessage('错误:','对不起,程序读取数据配置文件出错!');
    end;
      

  3.   

    第一:更新数据除了打开adotable之外还有什么更好的办法实现我上述的功能,可以是用户添加数据后就可以看到添加的信息就是实时显示信息!请给点意见或者代码!
      
      你之所以出现这样的情况是因为你的数据更新不是通过这个ADOTABLE来完成的,而是通过其它的SQL语句或是ADO的控件来完成的,在你有一个ADOTABLE来显示数据的情况下,我并不认同这样做,这时,如果你把更新数据的语句改为如下语句,那么,你的ADOTABLE不需要重新打开就可以看的到更新的数据了:
    adotable1.insert;
    adotable1.fieldbyname('fielda').asstring := variant1;
    {...}
    adotable1.post;二、一般来说,ADOCONNECTION是保持连接并不中断的,当然,如果服务器程序出现意外,那是另外一回事,你可以在这里捕捉异常事件:
      try
        adotable1.open;//不需要管ADOCONNECTION控件的属性,假设你设置keepconnect属性为TRUE
     except
       on e:exception do
       begin
          showmessage(e.message);
       end;
      end;三、我想你的这个问题对于程序的结构是一个很大的考验,你的程序结构是乎是B/S,C/S结构并行的结构,如果这样的话,你的程序会非常的麻烦,我认为,如果想做到数据的一致性的话,那么,你应该修改你的程序的结构,用COM+来完成你的功能,而不只只是用两层结构的开发模式。