我想做一个函数
自动生成n位的随机数(或字母)
并且不能和已经添加进数据库中的随机数(或字母)重复
比如说 随机生成一个编号后校验数据表中又没有这个编号,如果没有就在数据表中添加这个编号,如果又这个编号就继续循环直到这个数据表中没有有关这个编号的记录
请问哪位做过这类的功能请教教我吧

解决方案 »

  1.   

    var
      Randm: integer;
    begin
      Randm := Random(99999); 生成小于99999的随机数;
      with adoquery1 do
      begin
        close;
        sql.clear;
        sql.text := 'select * from tablename where fieldname =   //查询一下,看是否有相同记录
        Open;
        if RecordCount > 0 then
           Randm := Random(99999)
        else
           ......................
    end;
      

  2.   

    这个问题并不难,随机数的函数就是random,这没什么好说的,主要是在生成n位的这个n上,有很多方法和函数可以解决这个问题,我自己想了个比较笨点的函数如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var n,num:integer;
    begin
        n:=StrToInt(Edit1.Text);
        num:=9;
        while length(inttostr(num))<>n do
        begin
            num:=num*10+9;
        end;    
    end;然后再用random(num)生成随机数并与已有的比较就可以了
      

  3.   

    注意:如果你的n超过9位就不要用integer类型了
      

  4.   

    看你的使用频率了如果反复使用多次,那就把数据库弄到内存中去,这样生成的随便数就快了lcoatfind
      

  5.   

    function Ran:string;
    begin
        1.先生成n位的随机字符串a。//这个很简单吧 就8多说啦:)
        2.然后:
        if a 不在数据库中 then
        begin
            result:=a;
        end
        else
        begin
            result:=Ran;
        end;
    end;
      

  6.   

    调用Random之前先要调用Randomize