我想实现一个自动加一的问题。是一个关于客户服务的程序,每一个地区有一个地区编码,相应的每个地区有很多的客户,现在想在每个地区范围内客户号选择最大的加一。
我的sql语句是这样的:select 客户号 from 客户表 where 地区编码 =某个值,
还定义了一个函数:
function max(m,n:integer):integer;
begin
  if m>n then
  result:=m+1
  else 
  result:=n+1;
end;
具体实现是这样的:
begin
  if adoquery1.isempty then
  khh=1
  else
  khh:=max(1,strtoint(adoquery1.fieldbyname('khh').asstring));
end;
这样运行起来不对,总是只加一次就完了,怎么修改?或者还有没有其他的更好的方法了,除了设计数据库时用“标识”的方法!

解决方案 »

  1.   

    adoquery1刷新一下:
    adoquery1.close;
    adoquery1.open;
      

  2.   

    adoquery1.active:=false;
    adoquery1.sql.clear; 
    adoquery1.sql.add('select max(xmbh) as maxxmbh from 客户表‘);
    adoquery1.active:=true;
        if adoquery1.IsEmpty then
        begin
          lastnum := 1;
        end
        else
        begin
          lastnum := adoquery1.Fieldbyname('maxxmbh').AsInteger + 1;
        end;
      

  3.   

    同意楼上的方法,你先用max找出客户里最大的,将其值存储为一个字段,然后再读出
      

  4.   

    用触发器,在添加操作的时候,使其触发
    具体如下CREATE TRIGGER t_max_code
    ON table_name
    FOR INSERT
    AS declare @client_code int  /* 存放客户号*/
    declare @area_code varchar(30) /* 存放地区编码*/
    declare e_cursor CURSOR FOR select 地区编码 from table_name
    OPEN e_cursor
    WHILE @@FETCH_STATUS <> -1
     BEGIN
       FETCH NEXT FROM e_cursor INTO @area_code 
       select @client_code = max(客户号) from table_name where 地区编码 = @area_code  
       update inserted set 客户号 = @client_code + 1 
     ENDCLOSE e_cursor
      

  5.   

    wxjjchen(闷) :感觉你的方法很好,但是什么是触发器,到底怎么用它,什么情况下用比较好。谢谢你,到时候一定给你很多的钱,谢谢,谢谢,谢谢!多谢了!