procedure Tsfgl.FormCreate(Sender: TObject);
 var maxno,tmp:integer;
begin
  with adoquery2 do
    begin
       open;
       first;
       sql.Text:= 'update gl_xysf set sfxm = (select sfxm from jc_sfxm) where gl_xysf.sfid = jc_sfxm.sfid';
       execsql;
       maxno:=fieldbyname('sfxh').asinteger;
       while not eof do
         begin
            tmp:=fieldbyname('sfxh').asinteger;
            if maxno<tmp then maxno := tmp;
            next;
         end;
       edit2.text :=inttostr(maxno + 1);
        close;
      end;
end;

解决方案 »

  1.   

    上面红字语句弄错了。
    我想写成
     sql.Text:= 'update gl_xysf set sfxm = (select sfxm from jc_sfxm where gl_xysf.sfid = jc_sfxm.sfid)';
    但又出现如下提示:
    操作必须使用一个可更新的查询
      

  2.   

    什么数据库?
    如果是sql200x,改为:
    update gl_xysf
    set gl_xysf.sfxm = jc_sfxm.sfxm
    from gl_xysf
    left join jc_sfxm on gl_xysf.sfid = jc_sfxm.sfid
    试一试
      

  3.   

    我用的access,
    的确,语句写错了。
    我改成了这样
     sql.Text:= 'update gl_xysf set sfxm =jc_sfxm.sfxm where gl_xysf.sfid=gl_sfxm.sfid';
    但,在delphi7 运行时提示这个错误,好几天没研究出来为啥。参数jc_sfxm.sfid没有默认值。
      

  4.   

    Access数据库,有一些语法规则和SQL不一样。
      

  5.   

    你这语句里哪有jc_sfxm.sfid呀,
    这种错误,多是字段名写错了
      

  6.   

    你首先要确认在Access执行没有问题才可以!