表结构
-----------------------------------------------------
|    编号 |       姓名         |    拼音码          |
-----------------------------------------------------
|  0001   |    李千万          |     LQW            |
-----------------------------------------------------
其中拼音码是由一个函数根据GETPINYIN(STR)得到的。
DBGridEH中显示为
----------------------------------------------
|     编号 |           姓名                  |
----------------------------------------------
|   0001   |        李千万                   |
----------------------------------------------
我直接在DBGridEH双击修改 姓名’李千万’为’张三’怎么能把此记录的拼音码’LQW’自动改为’ZS’

解决方案 »

  1.   

    DataSet.FieldByName('Name').OnSetText里写。
      

  2.   

    具体怎么写,怎么取出还没有POST之前姓名‘张三’,就是如题所说的GETPINYIN(STR)这个函数里要用的STR,请说具体点,谢谢
      

  3.   

    TO ygflydream(飞飞) 总能看到你
    呵呵,
      

  4.   

    这种问题我见人家用触发器来解决过,当DBGridEH焦点失去的时候会触发一个更新事件,你试试看
    我很少用感知控件,这个可能帮不了你
      

  5.   

    这样,在关联DataSet.AfterOpen写:
    DataSet.FieldByName('Name').OnSetText := NameSetText;
    定义函数:procedure NameSetText(Sender: TField; const Text: String);
    实现:
    begin
      Sender.AsString := Text;
      Sender.DataSet.FieldByName('Pinyin').AsString := GETPINYIN(Text);
    end;
      

  6.   

    procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);在这个事件中就足可以达到楼主的要求,不需要取李万千以前的,不管以前的,
    只将张三的姓名转成拼音再POST即可。就是一个字段赋值操作。
      

  7.   

    问题是POST之前用什么取得姓名的值,如果用dm.ADOQ2.FieldValues['姓名']取得是原来的值
      

  8.   

    解决了,放分,呵呵,谢谢各位
    procedure Tdm.ADOQ2xingmingChange(Sender: TField);
    var
    s_sp:shortstring;
    begin
         s_sp:='';
         S_SP:=ADOQ2xingming.Text;
         getbm(s_SP, 3);
         ADOQ2.FieldByName('pinyin').AsString:=s_SP;
    end;
    特别感谢ghyghost(爱国人士【论坛秀】CSDN秀工厂-周周秀不断) 和 ygflydream(飞飞)