有10个编辑框
edit1  edit2  edit3 ..........edit10规定edit中的数字必须是按顺序填入,不存在中间edit.text为空的情况.
如果edit1,edit2不为空。
那么以edit1,edit2为值插入数据库,需要插入两条记录
insert into table values(edit1.text,edit2.text);
insert into table values(edit2.text,edit1.text);
可通过公式进行计算发生情况的数目:
x:edit不为空的最大id
x>=2;   y=x*x-x    (y=x的平方-x )
有2个编辑框则对应需要插入2组数据,分别为edit1和edit2的位置变换。
有3个编辑框则对应需要插入6组数据:
说明: 存在edit1.text,edit2.text,edit3.text
则插入数据为两两交换:
insert into table(edit1,edit2)
insert into table(edit2,edit1)
insert into table(edti2,edit3)
insert into table(edit3,edit2)
insert into table(edit1,edit3)
insert into table(edit3,edit1)对应需要插入的数目为
编辑框数       插入数
2                 ---2        
3                 ---6 
4                ---12
5                 --20
6                 --30
7                 --42
8                 --56
9                 --72
10               --90现在的想法是:
首先判断存在数据的编辑框的最大id来取得有几组数据
for i := 0 to 9
 do
  begin
   if TEdit(Panel1.Controls[i]).Text = '' then
     begin
       showmessage(inttostr(i));
      break;
     end;
如果i为3跳出,则说明第四个编辑框为空,前三个编辑框存在数据,则应该插入6条数据。
如果第一个编辑框为空则认为无数据,程序终止。
如果第10个不为空则全有数据,那么就需要插入90条记录。小弟水平比较低,希望高手指点详细实现。

解决方案 »

  1.   

    使用lixtbox显示结果
    procedure chuli(i:integer);
    var j:integer;
    begin
      for j=i downto 1 do //理论上对于每个数字作为组合开头的基准
      begin  
        if j<2 then break; //一旦为1的时候也就没有必要作为基准
        for k:=j-1 downto 1 //对于每个基准使之与每个小于它的数字进行组合并倒序
        listbox1.add(inttostr(j)+'----'+inttostr(k));
        listbox1.add(inttostr(k)+'----'+inttostr(j));
        chuli(j);//递规此过程 用下一个基准
      end;
    end;
    手头上没有编译器 没有实际测试 还不知道是什么效果
      

  2.   

    使用lixtbox显示结果
    procedure TForm1.Button1Click(Sender: TObject);
    var j,k,i:integer;
    begin
      i:=5;
     listbox1.Items.Clear;
        for j:=i downto 1 do //理论上对于每个数字作为组合开头的基准
      begin
        if j<2 then break; //一旦为1的时候也就没有必要作为基准
        for k:=j-1 downto 1  do
         begin    //对于每个基准使之与每个小于它的数字进行组合并倒序
          listbox1.Items.Add(inttostr(j)+'----'+inttostr(k));
          listbox1.items.add(inttostr(k)+'----'+inttostr(j));
          //chuli(k,listbox1);//递规此过程 用下一个基准
         end;
      end;
    end;
    呵呵 跑到楼下验证了一下 递规是不需要的 
    上面的算法得出数字的组合 那么你在操作的时候对于I的初值你控制为你的最大的edit编号
    然后用数字去对应edit 中间再加入插入数据库就没有问题了
      

  3.   

    procedure chuli(j:integer;listbox1:Tlistbox);
    var k:integer;
    begin
        if j<2 then exit; //一旦为1的时候也就没有必要作为基准
          for k := j-1 downto 1  do
          begin
          listbox1.Items.Add(inttostr(j)+'----'+inttostr(k));
          listbox1.items.add(inttostr(k)+'----'+inttostr(j));
          end;
          chuli(j-1,listbox1);//递规此过程 用下一个基准
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      listbox1.Items.Clear;
      chuli(strtoint(Edit1.text),listbox1);
    end;
    这样也时可以地
      

  4.   

    ok,正解,结帖了。谢谢啦!QQ号多少?我的是403923250,交个朋友。