在只有一条记录的dbgrid中修改字段值,我是调用post但不知为什么不行,谁有其他得好方法吗,请指导(最好能有些代码)

解决方案 »

  1.   

    with Query do
    begin
      Close ;
      Sql.Text := 'update tablename set field1 = ''1234''' ;
      ExecSql ;
    end ;//with DataSet do
    begin
      Open ;
      //... Next ;
      Edit ;
      FieldbyName('fieldname').AsString := '' ;
      Post ;
    end; 可以吗 ?
      

  2.   

    你想自己POST,用STRINGGRID不是更好?!
      

  3.   

    我是在只有一条查询记录的dbgrid控件中直接让用户可以dbgrid单元中直接修改记录内容,然后单击提交button,
    postclick(sender:object)
    begin
      query.post
    end.
    不知为什么,数据库的内容并没有更改
      

  4.   

    cg1120(代码最优化-§新年祝福你,好运伴着你§) :STRINGGRID哪里有数据原呀
      

  5.   

    outer2000(天外流星) :多条记录只要移到其他记录就自动post,但我是在只有一条记录的dbgrid中修改字段值也!!!
      

  6.   

    (1)dbgrid根本就不用你POST
    (2)只有一条记录时,如果只有修改了一个字段或最后一个修改的字段没
         有 POST,想办法把光标从最后一个修改的字段上移走,
          如:在单击提交button前让光标移动到另一个字段上。
    (3)postclick(sender:object)
         begin
           query.e;dit;
           query.post;
         end.
      

  7.   

    procedure TForm1.actpostinfoExecute(Sender: TObject);
    begin
    dm1.adoInfoquery.Edit;
      dm1.adoInfoquery.post;
    end;//我的代码,数据库没有任何改变
      

  8.   

    我的adoquery查询只有一条记录,如何移到其他记录呀?光标从最后一个修改的字段上移走也同样没有提交数据
      

  9.   

    Edit在Post 完全可以啊,我试过了。
      

  10.   

    没有啊,另一个有多条记录的DBGRID就可以直接通过移动光标达到修改目的呀
      

  11.   

    icecsdn(问到懂为止!~) :你使用的adoquery吗,我有两个adoquery在同时用这个表。并且为打开状态,我通过连接adoquery1的dbgrid1修改这个表
      

  12.   

    在DBGrid中修改数据,不用你Post或滚动数据,焦点一离开DBGrid,它会自动Post。而且按照你这样写也没有错。
      

  13.   

    如果是在一个应用程序,不会有这个问题的。
    其实你的问题是不是这样的:
    有两个应用程序,两个应用程序都用ADOQuery打开一个表,当一个应用程修改记录,另一个应用程却不能即时更新内容,是吗?
    如果这样的话,我想你是用Access数据库,Access确实存在这样的问题,因为我曾碰到过,必须隔一段时候改能接收到数据的修改,所以建议你换数据库。
      

  14.   

    我刚刚试过:你用一个保存按钮写上:
    dbgrid1.DataSource.DataSet.Post;就更新了。
      

  15.   

    说一下代码:db2表mytable1
    dbgrid1,adoquery1,//显示表中所有记录的某些字段,不可编辑
    dbgrid2,adoquery2,//双击dbgrid1时则显示这条记录的所有字段,可编辑
    若adoquery2.locktype=ltOptimistic,则单击提交时会报错:multiple-step operation generated errors.check each status value
    所以我改为adoquery2.locktype=ltBatchOptimistic了,但单击提交mytable1没有任何更改
      

  16.   

    procedure TForm1.actpostinfoExecute(Sender: TObject);
    begin
    dm1.adoquery2.Edit;
      dm1.adoquery2.post;
    end;//我的代码,数据库没有任何改变
      

  17.   

    再添加一条空记录,try try
      

  18.   

    如何添加一条空记录?或者可以得到修改后的每一个cell中的值吗?
      

  19.   

    假设你的dbgrid2使用的TDataSource的名为Datasource2 
    procedure TForm1.actpostinfoExecute(Sender: TObject);
    begin
      dm1.Datasource2.DataSet.Edit;
      dm1.Datasource2.DataSet.Post;
    end;
      

  20.   

    我完全执照你的说法去做,但没有什么问题,要是只有一条记录的情况下,只要你post一下,就会保存数据。
    另外:双击dbgrid1时则显示这条记录的所有字段,你的代码是怎么写??我想问题可能出在这里
      

  21.   

    放一个TEdit控件
    在按钮事件加入
    Edit1.SetFocus;
    就ok了
      

  22.   

    procedure TForm1.DBGrid1DblClick(Sender: TObject);
    var
      strgonghao,strexamin,strchapter:AnsiString;
      count:integer;
    begin
        if not dm1.adoQuery.Active then
            exit;
        if DBGrid1.SelectedRows.Count>=0 then //只会有一行被选中
          begin
             strgonghao:=dm1.adoQuery1.fieldbyname('工号').AsString;
            dm1.adoquery2.Active:=false;
            dm1.adoquery2.SQL.Clear();
            dm1.adoquery2.SQL.Add('select chrgonghao as 工号,chrname as 姓名,chrdaqu as 大区,chrcity as 城市,decbrowsetime as 浏览时间,intyear as 年,intmonth as 月 ');
         for count:=0 to intchapter-1 do//intchapter:章节数
            strchapter:=Format(strchapter+',intchapterno%d as 第%d章节号,decstudyprogress%d as 第%d章节学习进度,chrchaptername%d as 第%d章节名称,datestartdate%d as 第%d章节开始日期,dateenddate%d as 第%d章节结束日期 ',[count,count,count,count,count,count,count,count,count,count]);
            dm1.adoInfoquery.SQL.Add(strchapter);
            for count:=0 to intexamin-1 do//考试数
            strexamin:=Format(strexamin+',chrexamincode%d as 考试代号%d,chrexaminname%d as 考试名称%d,decachieve%d as 考试成绩%d,datedate%d as 考试日期%d ',[count,count,count,count,count,count,count,count]);
            dm1.adoInfoquery.SQL.Add(strexamin);
            dm1.adoInfoquery.SQL.Add(' from '+strCurrQueryT+' where chrgonghao='''+strgonghao+'''');
            dm1.adoInfoquery.Open();
          end;
    end;
      

  23.   

    sorry: 
    adoInfoquery既是adoquery2,我忘改了
      

  24.   

    shadow7880(赛都) :你那样也没用。
      

  25.   

    : nhcf() 后面的代码呢》好像还没完嘛你没有更新数据库的代码啊
      

  26.   

    你都adoquery2.locktype=ltBatchOptimistic了,当然不会更新到数据库呀,除非你用adoquery2.updatebatch(),
    你的代码:dm1.Datasource2.DataSet.Edit;
      dm1.Datasource2.DataSet.Post;好象不能连在一起用的哦,先试试在edit与post之间加入一些数据集赋值语句看行不行,如不行则只好把edit与post分别放在不同的事件里执行了。
      

  27.   

    procedure TForm1.actpostinfoExecute(Sender: TObject);
    begin
    dm1.adoquery2.Edit;
      dm1.adoquery2.post;
    end;//我的更新代码,数据库没有任何改变
      

  28.   

    gzllich(刚从泥坑里出来) :若adoquery2.locktype=ltOptimistic,则单击提交时会报错:multiple-step operation generated errors.check each status value.  
       why???????????????
      

  29.   

    用adoquery2.updatebatch()也会出错multiple-step operation generated errors.check each status value.