怎样将用户对数据库修改过的内容先记录下来
到用户点击保存时才修改数据库。
现在用户只要移动到下一条记录时,刚才修改的内容就被保存了。(我没有post呀?)
请各位帮帮我。(我是菜鸟)

解决方案 »

  1.   

    使用ADO的batchupdate模式。
    设置cursortype为keyset或static
    设置locktype为batchoptimistic.
    执行的sql命令必须是select.一切数据更新都是只存在客户端内存中。
    要调用调用updatebatch来更新数据回数据库,调用cancelbatch取消对数据的修改。
      

  2.   

    数据输入是开发数据库程序的必然环节。在Client/Server结构中,客户端可能要输入一批数据后,再向服务器的后台数据库提交,这就需要在本地(客户端)建立临时数据表来存储用户输入的数据,待提交后,清除本地数据表。这种方法的好处是:提高输入效率,减小网络负担。  由于用户一次输入的数据量一般情况下较小(不会超过几百条记录),所以临时表可以建立在内存中,这样处理速度较快。临时表创建有如下两种方法: 1.使用查询控件创建临时表
      第1步:在窗体上放入查询控件(TQuery),并设置好所连接的数据表。
      第2步:添加如下语句:
      TQuery. CachedUpdates=True;
      TQuery. RequestLive=True。
     第3步:在原有的SQL语句后加入一条Where子语句,要求加入这条Where子语句后SQL查询结果为空。
      例如:
      SELECT Biolife."Species No", Category, Common_Name, Biolife."Species Name", Biolife."Length (cm)", Length_In, Notes, Graphic
      FROM "biolife.db" Biolife
      where Biolife.Category=′A′ and Biolife.Category=′B′
      这样临时表就建立好了。
      2.使用代码创建临时表
      函数代码如下:
      function CreateTableInMemory(const AFieldDefs:TFieldDefs):
      TDataSet;
      var TempTable:TClientDataSet;
      begin
      TempTable:=nil;
      Result:=nil;
      if AFieldDefs〈〉nil then
      begin
      try
      TempTable:=TClientDataSet.Create(Application);
      TempTable.FieldDefs.Assign(AFieldDefs);
      TempTable.CreateDataSet;
      Result:=(TempTable as TDataSet);
      Except
      if TempTable〈〉nil then TempTable.Free;
      Result:=nil;
      raise;
      end
      end
      end;
      在程序中按如下方法调用:
      procedure TForm1.Button1Click(Sender: TObject);
      var ADataSet:TDataSet;
      begin
      ADataSet:=TDataSet.Create(Self);
      with ADataSet.FieldDefs do
      begin
      Add(′Name′,ftString,30,False);
      Add(′Value′,ftInteger,0,False);
      end;
      with DataSource1 do
      begin
      DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
      DataSet.Open;
      end;
      ADataSet.Free;
      end;
      这样,临时表就创建完成。
      方法1使用简单,但由于利用了查询控件,清空数据时需要查询服务器后台数据库,所以速度稍慢,而且不适用于临时表中各个字段由几个数据表的字段拼凑而成的情况。方法2适用范围广、速度快,但需要编写代码。
      

  3.   

    timelyraining(jack_feng);
    临时表该怎样将数据更新回去呢?
      

  4.   

    to dejoy(燕青):我怎样判断数据库已经被修改了。