高分求助:一个Form上面用adoquery1、datasource1和dbgrid建立连接。
在Form上放一个TToolBar,并在TToolBar上建立一个TToolButton,名字为:cb_OKcb_OK的事件:
showMessage(adoquery1.fieldByName('Test').asstring);字段'Test'时的初始值='aaa'在修改状态时,修改字段'Test'的值='bbb',注意,这时没有转到下一字段,用屎标点下cb_OK,得到的值还是'aaa',也就是说,值没有变。
如果修改字段'Test'的值后,光标移到一下个字段,点下cb_OK,就可以得到值是'bbb'我想知道,如何在修改值时,就用屎标点cb_OK,就得到修改后的值'bbb',没理由让用户再打一个回车或移到下一行,点cb_OK,才得到修改后的值'bbb'

解决方案 »

  1.   

    你到底是update
    还是insert???
      

  2.   

    cb_OK的事件加上:
    if adoquery1.State in [dsInsert, dsEdit] then
      adoquery1.post;
    showMessage(adoquery1.fieldByName('Test').asstring);
      

  3.   

    楼上:ithinkthereforeiam我知道在dsBrow时,是可以得到修改后的值,但是这样是不可以的,因为我要在dsInsert时,做一些动作。所以不可以用post。
      

  4.   

    andyzhou1101(恋上Lcy...Happying:dsEdit,dsInsert都出现这种情况!
      

  5.   

    明白了,是这个:
    showMessage(adoquery1.fieldByName('Test').text);
      

  6.   

    段,用屎标点下cb_OK,得到的值还是'aaa',也就是说,值没有变。
          ~~~~强人呀,不得不服!
      

  7.   

    以上人回答都没有解决问题。
    其实我想,应该是输入时,如果不换行,数值是不会变的,因为有个缓存的在作用,大家可以看下POST的代码,就发现POST时会有一个清除缓存的作用。不过,如果这个问题真的解决不了,那各位,我劝你们还是尽量不要用TToolButton,廦免出现一些数据的错误,查错起来,就麻烦了。
      

  8.   

    试试这样吧,有点麻烦,应该可以:
    定义一个TTestGrid:
    type
      TTestGrid = class(TCustomGrid)
      end;
    ToolButton用下面的代码:
        if Assigned(TTestGrid(DBGrid1).InplaceEditor) and TTestGrid(DBGrid1).InplaceEditor.Visible then
        ADODataSet1.FieldByName(DBGrid1.SelectedField.FieldName).AsString := TTestGrid(DBGrid1).InplaceEditor.Text;
      ShowMessage(ADODataSet1.FieldByName(DBGrid1.SelectedField.FieldName).AsString);
      

  9.   

    不必要那么复杂,有种简单的方法:(已经检验过)
    procedure TForm1.ToolButton1Click(Sender: TObject);
    begin
      adoquery1.Post ;
      showMessage(adoquery1.fieldByName('v_name').asstring);
    end;
      

  10.   

    楼上这样做是不行的,因为数据要在dsEdit or dsInsert时进行一些运算。如果用Post时,我的程式行不通。