首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于ClientDataSet的Delta有关问题

2014-01-26 
关于ClientDataSet的Delta问题其实这个东西我最近才开始弄由于没有系统的学习和教详尽的教程 我也没太弄明

关于ClientDataSet的Delta问题
其实这个东西我最近才开始弄  由于没有系统的学习和教详尽的教程 我也没太弄明白。
我用的是firebird数据库  服务器使用的TSQLConnection 和 TDataSetProvider  
客户端使用ClientDataSet 连接DataSnap

我现在差不多都是使用CommandText在查询数据 因为我没用数据感知组件DBGrid之类什么的  所以都是循环从ClientDataSet里面把数据取出来然后放到对应的Edit里面。

现在的问题就是  我知道如果使用数据感知组件DBGird之类的  和ClientDataSet连起来  然后在DBGird里面修改后   最后可以使用ApplyUpdate(0)来一次性提交修改。

但是就是怎么使用Delta更新数据呢?
我看了一点使用Delta更新数据的资料  有点不太明白
因为我是直接从ClientDataSet里面取出来放到各个Edit里面的  现在就是难道我是用ComandText取出数据  但是我怎么改ClientDataSet里面的数据才会让Delta里面有修改的记录呢?

然后我再把Delta传给服务器再修改?就是这里有点晕  如果能给一点详细的示例代码就最好了
[解决办法]
if not VarisNull(delta) then
begin
    Cdsupdate.Close;
    Cdsupdate.Data:=delta;
      if not Cdsupdate.Active then Cdsupdate.Open;
      if CDSupdate.RecordCount>0 then
        begin
          Begintrans;
          CDSupdate.First;
          s1:='';
          s2:='';
          while not CDSupdate.Eof do
          begin
              CmdStr:='';
              case Cdsupdate.UpdateStatus of  //根据当前记录的状态生成相应的SQL语句。
                usUnmodified:
                  begin
                     
                  end;
                usModified:
                  begin
 
                  end;                  
               usInserted:
                 begin

                  end;
               usDeleted:
                 begin

                 end;
              end;
              if CmdStr<>'' then
                begin
                  try
                    with ExecSQLADO do
                      begin
                        close;
                        sql.Clear;
                        sql.Text:=CmdStr;
                        writelog(cmdstr);
                        Execsql;
                        AlreadyPost:=True;


                      end;
                    except
                      AlreadyPost:=False;
                      ExceptionObj := ExceptObject;
                      if ExceptionObj <> nil then
                      begin
                        writelog(ExceptionObj.ToString);
                        msg:=ExceptionObj.ToString;
                      end;
                      //break;
                    end;
                end;
              cdsupdate.Next; 
          end;
[解决办法]
TClientDataSet-> TEdit -> TClientDataSet -> TClientDataSet.ApplyUpdate

Delta 已经是修改的数据了,用它再做修改?

TClientDataSet.Edit;
TClientDataSet.FieldByName('xx').AsString := '1234';
TClientDataSet.Post;

这个结构,Delta 就会变化呢了。
(希望,你的 sql 是从一张表里取的,否则,这个ApplyUpdate还需要在“服务器”端,加代码。)

热点排行