请教,如何生成十个连续不重复的随机数,并存入数据库

解决方案 »

  1.   

    //产生一个随机数.
    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      i,K:integer;
    begin
      i:=9999;
      randomize;
      k:=random(i);   // 随机数  AdoQry_tmp.Close;
      Adoqry_tmp.SQL.Clear;
      adoqry_tmp.SQL.Text:='select PWD from ZK_KW_ROOM where PWD='+Inttostr(k)+'';
      Adoqry_tmp.Open;
        //进行检查, 如果数据表中不存在此数据则, 保存到表中, 如果已存在, 则继续产生随机数.
        if Adoqry_tmp.RecordCount=0 then
          begin
            AdoTable1.Append;
            // 在此, 我将"试室保密号"存入了ID 字段.
            Adotable1.FieldByName('ID').AsString:=IntToLGStr(k,4);
            Adotable1.FieldByName('PWD').AsInteger:=K;
            Adotable1.Post;    //保存。 
            //添加到左边的列表中.
            // Listbox1.Items.Add(IntToLGStr(k,4));
          end;
    end;把上面的改成一个过程,连续运行这一过程10次。 
    for K:= 1 to 10 do
    begin
      MakeRandom();
      // 必要时对产品的随机数排序。
      
    end;
      不知这样可否。
      

  2.   

    MyArray = array of Integer;var
      Form1: TForm1;
      a1: MyArray;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
    begin
      for I := Low(a1) to High(a1) do
      begin
        ShowMessage(IntToStr(a1[I]));
      end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    var
      I, J, temp: Integer;
    begin
      SetLength(a1, 10);
      for I := 0 to 9 do
      begin
        a1[I] := I;
      end;
      Randomize;
      for I := 0 to 9 do
      begin
        J := Random(10);
        if I <> J then
        begin
          temp := a1[J];
          a1[J] := a1[I];
          a1[I] := Temp;
        end;
      end;
    end;可以根据需要将动态数组和随机数范围增大, 以产生符合自己要求的数字
      

  3.   

    --方法1
    --建立随机整数,也可以是浮点
    --查询不到则insertdeclare @I int
    declare @iRND int
    declare @MAXCOUNT INT
    set @I=0
    set @MAXCOUNT = 10
    WHILE @I<@MAXCOUNT
    begin
      Set @iRND = Cast(Rand() * 1000 as int)  If not Exists(select * from MyTable where MyRand=@iRND)
      begin
    Insert Into MyTable values(@iRnd)
        set @I=@I+1
      end
    end--方法2
    --产生GUID
    --替换掉其中的-字符
    --剩下16进制的长字符串,直接插入即可不用考虑是否重复;
    --如:0D3BBF5B8A444C5E98F95EFEE648D68C
    --注意,该处返回是string 类型。
    Insert Into MyTable value(Replace(newid(),'-',''))