//---------------取得自动编号----------
procedure TFusercon.BH;
var
  s,m:string;
begin
  with FDM.qry1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('Select max(number) as maxid  From userinfo');
    Open;
  end;
  if FDM.qry1.FieldByName('maxid').AsString = null  then
    s:=s+'1'
  else
  begin
    FDM.qry1.First;
    m:=Trim( FDM.qry1.fieldbyname('maxid').AsString);
    s:=inttostr(strtoint(m) + 1);
  end;
   Edit1.Text := s;
end;   
    我要向数据库里插入一条新的记录,要是我执行了是得到最大编号+1,可是在我执行上面代码后,会把dbgrid里的显示关闭,在dbgrid里显示我是用qry1,谢谢

解决方案 »

  1.   

    procedure TFusercon.BH;
    var
      s,m:string;
    begin
      with FDM.qry2 do
      begin
      Close;
      SQL.Clear;
      SQL.Add('Select max(number) as maxid From userinfo');
      Open;
      end;
      if FDM.qry2.FieldByName('maxid').AsString = null then
      s:=s+'1'
      else
      begin
      FDM.qry2.First;
      m:=Trim( FDM.qry2.fieldbyname('maxid').AsString);
      s:=inttostr(strtoint(m) + 1);
      end;
      Edit1.Text := s;
    end;   
    在放一个ADO, 命名 qry2 取最大号时 不要使用qry1
      

  2.   

    多加一个ADOQUERY就行啦.不要想得太复杂.还有,可以只用一条语句'Select max(number)+1 as maxid From userinfo'或 INSERT INTO XX SELECT IFNULL(MAX(NUMBER),0)+1, '其它内容' from XX
      

  3.   


    select isnull(max(字段ID),0) as a from table
    并发可行的
      

  4.   

    多加一個ado,前面的最大值直接+1...
      

  5.   

    首先判断是否为空如果不为空select max(字段名)as别名from 表名
    如果为空是就赋一个初始值
      

  6.   

    2个query之间,可以有别的客户端也这样进行了一次。应该把2个sql写在一起,一次提交
      

  7.   

    这个需求,如果是mssql,最好是直接采用 自动递增id字段
      

  8.   

    多加一個ado,前面的最大值直接+1
      

  9.   

    //---------------取得自动编号----------
    procedure TFusercon.BH;
    var
      s,m:string;
    begin
      with FDM.qry1 do
      begin
      Close;
      SQL.Clear;
      SQL.Add('Select max(number) as maxid From userinfo');
      Open;
      end;
      s:=FDM.qry1.FieldByName('maxid').AsString
      if s = null then
      s:=s+'1'
      else
      begin
      FDM.qry1.First;
      m:=Trim( FDM.qry1.fieldbyname('maxid').AsString);
      s:=inttostr(strtoint(m) + 1);
      end;
      Edit1.Text := s;
    end;   
      

  10.   

    多加一个ado, 
    sql.add ('select max(isnull(number,0)) maxid from table AAA')
    sql.open;
    m:= ado.fieldbyname('maxid');
    edit1.text := inttostr(strtoint(m)+1);...
      

  11.   

    SELECT MAX(number)+1 AS maxid FROM table WHERE ISNUMERIC(number)=1
    然后判断是否为空,要是为空就给成0