一个dbedit组件要求在按下[增加]按钮时(数据库添加一个记录)能自动生成一个最大数字;要求该编号为stk(试题库)中bh(编号)字段的最大值+1;此时dbedit为不可编辑状态;
-----------------------------------------
因为书上给的程式不够完全,说的也相当简略
所以希望高手能帮帮忙 要实现以上功能都要用到那些组件
程序该怎么写   感激!!!另一个问题是我怎么给不了200分呢

解决方案 »

  1.   

    1 用select max(bh) + 1 from stk 添加
    2 或者你直接在数据库建一个trigger3 看csdn说明吧,你的级别不够:)
      

  2.   

    1、.DB数据库、\Access数据库、sql server数据库都支持自增一字段,可以选择
    2、select max(fldname)+1 as new fldvalue from tblname
    得到这个值就达到你的要求了
      

  3.   

    INT I=0;
    QUERY->SQL->ADD('SELECT MAX(bh) FROM TABLENAME');
    QUERY->ACTIVE=TRUE;
    I=QUERY->fIELDS->FIELDS[0]->ASINTEGER;
    ok,以上可以把最大值赋于整型变量I。QUERY->SQL->ADD('INSERT INTO TABLENAME (bh) values(i+1)');
    QUERY->ACTIVE=TRUE;OK。所有步骤已完成,不过以上可能只是一个思路!
      

  4.   

    我可能没说的太清楚  对不起耽误大家的时间了我的意思是调出一个表里面编号的最大值
    把它+1做为下一个记录的编号
    同时这个编号能在dbedit里面显示出来   该怎么设置谢谢大家的热心 我想我最后肯定在大家的帮助下解决这个问题的 :)
      

  5.   

    假设你的这个字段命名为  fRcordNO,表名为 TableName。
    一个比较简单的方法。procedure TForm1.BtnAddClick(Sender: TObject);
    var
      MaxNo: integer;
    begin
      with Query1  do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT MAX(fRecordNO) FROM TableName');
        Open;
        MaxNo := Query1.FieldByName('fRecordNo').AsInteger;
      end;
        
      Query1.Append;
      Query1.FieldByName('fRcordNo').AsInteger := MaxNo;
    end;
      

  6.   

    select max(bh) + 1 from stk 
    把bh赋给dbedit
      

  7.   

    不知道你们为什么都没有加事务,其他人读到相同的ID怎么办.
    一,增加事务,在beforepost中实现取最大值,然后马上commit
    二,新增表记录ID最大值,单同样避免不了最大值重复。
      

  8.   

    var
      maxID:integer;
    begin
    with Query1  do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT MAX(ID) FROM Table1');
        Open;
        maxID:= Query1.FieldByName('iD').AsInteger+1;
        edit1.text:=inttostr(maxID);
        close; 
        sql.clear;
        sql.add('select * from table1 where ID='''+maxID+'''');
        open;
        Append;
        FieldByName('ID').AsInteger := maxID;
        ......................................
        post;
    end;