1:
dbgrid1.Oncolexit:
if not (table1.state in [dsedit,dsinsert] then exit;
if table2.locate('工号',table1.fieldbyname('工号').AsString,[]) then
begin
with table1 do
begin
  table1.fieldbyname('姓名').AsString :=table2.fieldbyname('姓名').AsString  ;
  table1.fieldbyname('技术等级').AsString :=table2.fieldbyname('技术等级').AsString ;
end; 
end;
2:
  dbgrid1.OnKeypress:
  
if key=#13 then
begin
  key:=#0;
  postmessage(activecontrol.handle,WM_keydown,vk_tab,0);
end;

解决方案 »

  1.   

    在dbgrid1中建立永久字段名:工号 姓 名 技术等级 出勤天数还不如建一个个人资料表,放个人的一些资料:工号 姓 名 技术等级 ,这样比较好。
      

  2.   

    致chenjiong(准程序员:升级中....):
        我目的主要是动态调用基本表中需要的内容(这种应用很多)。如您所说,不如直接用电了表格建个人资料。
      

  3.   

    在datasource1控件的OnDataChange事件加入以下代码  if MyEdit then
      begin
        MyEdit := False ;
        if table2.Locate('工号' ,table1.FieldByname('工号').Asstring,[loCaseInsensitive]) then
        begin
          table1.fieldbyname('工号').AsString  :=i ;
          table1.fieldbyname('姓名').AsString :=table2.fieldbyname('姓名').AsString  ;
          table1.fieldbyname('技术等级').AsString :=table2.fieldbyname('技术等级').AsString 
        end ;
        MyEdit := true ;
      end ;注:MyEdit为外部变量,防止在修改数据时发生死循环。
      

  4.   

    致jianping0(ljp):
       按您的方法编译时出现[Error] Unit1.pas(33): ')' expected but 'THEN' found和[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'错误。
       若去掉第一个IF语句,可编译完成,但在第一行输入数据正确,可输入第二行数据或其它据时出现错误:project project1.exe raised exception call edbengineerror with message 'key violation.'
        如何处理?让您见笑了,您看我多笨!盼解答。
      

  5.   

    1)看不懂这段程序有什么用??
      last;
      edit;
      i:=dbgrid1.selectedfield.AsString  ;
      post;
      edit;
    2)第一位的回答已经很详细了,可以重点参考 
    3)肯定要使用查找字段或者是定位字段的方法
      

  6.   

    致: xxmmmx(踢踏) 
    1)我是初学者,目前确实没有什么用,不过我正在努力。
    2)你说得比较清楚,我看懂了。
    3)若用查找字段在表中单元格会出现很多的讨厌的选择下三角,如果基本表内容很多,速度会很慢。
    4)非常感谢你的指点!
      

  7.   

    第一个if后面少了一个')':
    if not (table1.state in [dsedit,dsinsert]) then exit;