我在数据集进行某种操作时,我批量修改数据库中的某个字段的值,但是出现了一个问题,问题如下:
var i:integer;
begin
   with DM do
   if ADODataSet.State <>dsInActive then
    begin
        ADODataSet.DisableControls ;
        For I:=0 to ADODataSet.RecordCount -1 do
        begin
          ADODataSet.Edit ;
           ADODataSet['FLJHMX_LYRQ']:=Date;//打印日期  可以实现批修改
           ADODataSet['FLJHMX_DQRQ']:=Date_DQR.Text;//到货日期,Date_DQR:为日期显示控件
           ADODataSet.Next ;
        end;
       ADODataSet.EnableControls ;
       ADODataSet.UpdateBatch;
    end;
end;
问题:ADODataSet['FLJHMX_DQRQ']:=Date_DQR.Text,可以执行第一次操作的赋值
      如:当我点击'打印'按钮,时,ADODataSet['FLJHMX_DQRQ']字段值为Date_DQR.Text选怿的
   值,但是当我改弯Date_DQR.Text的值后,再点击'打印'按钮,ADODataSet['FLJHMX_DQRQ']的
   字段值没有发生变化,而是上一次的值,请问这是怎么回事?可否实现,每次打印时
     ADODataSet['FLJHMX_DQRQ']字段时都为Date_DQR.Text中的数据?

解决方案 »

  1.   

    我的意思就是,我每次在打印的时候,批量的修改ADODataSet['FLJHMX_DQRQ']字段值,并保存到数据库中去,而
    该字段的值为Date_DQR控件的Text值!,Date_DQR的值是可以任意变化的!
      

  2.   

    var i:integer;
    begin
       with DM do
       if ADODataSet.State <>dsInActive then
        begin
            ADODataSet.DisableControls ;
            //For I:=0 to ADODataSet.RecordCount -1 do
            For I:=1 to ADODataSet.RecordCount do
            begin
               ADODataSet.RecNo := I;
               ADODataSet.Edit ;
               ADODataSet['FLJHMX_LYRQ']:=Date;//打印日期  可以实现批修改
               ADODataSet['FLJHMX_DQRQ']:=Date_DQR.Text;//到货日期,Date_DQR:为日期显示控件
               ADODataSet.Next ;
            end;
           ADODataSet.EnableControls ;
           ADODataSet.UpdateBatch;
        end;
    end;更典型的写法var i:integer;
    begin
       with DM do
       if ADODataSet.State <>dsInActive then
        begin
            ADODataSet.DisableControls ;
            //For I:=0 to ADODataSet.RecordCount -1 do
            ADODataSet.First();
            while(not ADODataSet.Eof) do
            begin
              ADODataSet.Edit ;
               ADODataSet['FLJHMX_LYRQ']:=Date;//打印日期  可以实现批修改
               ADODataSet['FLJHMX_DQRQ']:=Date_DQR.Text;//到货日期,Date_DQR:为日期显示控件         
               ADODataSet.Next ;
            end;
           ADODataSet.EnableControls ;
           ADODataSet.UpdateBatch;
        end;
    end;
      

  3.   

    //更正
    var i:integer;
    begin
       with DM do
       if ADODataSet.State <>dsInActive then
        begin
            ADODataSet.DisableControls ;
            //For I:=0 to ADODataSet.RecordCount -1 do
            For I:=1 to ADODataSet.RecordCount do
            begin
               ADODataSet.RecNo := I;
               ADODataSet.Edit ;
               ADODataSet['FLJHMX_LYRQ']:=Date;//打印日期  可以实现批修改
               ADODataSet['FLJHMX_DQRQ']:=Date_DQR.Text;//到货日期,Date_DQR:为日期显示控件
               //ADODataSet.Next ;
            end;
           ADODataSet.EnableControls ;
           ADODataSet.UpdateBatch;
        end;
    end;
      

  4.   

    各位,我做出来了,只是在循环之前将数扭集的光标移到第一笔记录处,这样的话,才能再次循环数据集中的所有记录!否则,因为当第一次执行时,执行完之后,数据集光标停留在最后一笔记录处,当循环时,只更改了最后一笔记录的值:程序如下:
    var i:integer;
    begin
       with DM do
       if ADODataSet.State <>dsInActive then
        begin
             ADODataSet.First;
            ADODataSet.DisableControls ;
            For I:=0 to ADODataSet.RecordCount -1 do
            begin
               ADODataSet.Edit ;
               ADODataSet['FLJHMX_LYRQ']:=Date;//打印日期  可以实现批修改
               ADODataSet['FLJHMX_DQRQ']:=Date_DQR.Text;
               ADODataSet.Next ;
            end;
           ADODataSet.EnableControls ;
           ADODataSet.UpdateBatch;
        end;
    end;