想建立一个表,并插入数据。表的列名我想用数组变量gain[i]来生成8列,并且插入除了等于max_gain的7列数据。下面写的代码是乱写的,仅仅是想描述一下思路,请大侠指教,应该如何写这个代码。
......
for i:=1 to 8 do
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('create table O11 ('+gain[i]+' int)');
execsql;
end;
if max_gain<>gain[i] then
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('insert into O11 ('+gain[i]+') select '+gain[i]+' from test where '+max_gain+'=1');
execsql;
end;
end;
......

解决方案 »

  1.   

    晕,你的程序的大概SQL是这样的你insert 了8条记录
    每条记录分别只有一列有值
      

  2.   

    with adoquery1 do
    begin
     close;
     sql.clear;
     sql.add('create table tO11');
     for i:=1 to 8 do
     begin
       sql.add(gain[i]+ ' int');
     end;
     sql.add(')');
     execsql;
    end;
    我这也是乱写的insert 语句的自己写吧
      

  3.   


    乱不要紧,但大体意思可别写错了哦还有偶是二楼如果每条记录都有八条记录的话
    sql1:='';
    sql2:='';
    for i:=1 to 8 do
     begin
       if i=8 then sql1:=sql1+gain[i]
       else  sql1:=sql1+gain[i]+',';
     end; sql2:= ' insert into tO11 ('+sql1+') select '+sql1+' from test where  条件' sql.add(sql2);
      

  4.   

    新增表已经可以实现了,但插入数据不知道该怎么实现
    const gain:array[1..8]of string=('id1','id2','id3','id4','id5','id6','id7','id8');
    var i:integer;
        max_gain:string;
    begin
    max_gain:='id5';
    with adoquery1 do
    begin
     close;
     sql.clear;
     sql.add('create table tO10');
     execsql;
    end;
     for i:=1 to 8 do
     begin
    if gain[i]<>max_gain then
    begin
    with adoquery1 do
    begin
     close;
     sql.clear;
     sql.add('alter table tO10 add '+gain[i]+' int');
     execsql;
    end;
    end;
    end;
    end;
      

  5.   

    1 你的程序没有INSERT记录2 alter table tO10 add '+gain[i]+' int' 是修改表结构3 你有没有试过偶的SQL?
      

  6.   

    是的 insert 的不会啊 
    试过你的了 也不行啊
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    const gain:array[1..8]of string=('id1','id2','id3','id4','id5','id6','id7','id8');
    var
      i : integer;
      sColName,sColValue : string;
    begin
      sColName := '';
      for i := 1 to high(gain) do
      begin
        sColName := sColName + gain[i] + ' int, ';
        sColValue := sColValue + inttostr(i) + ', ';
      end;
      sColName := copy(sColName,1,length(sColName) - 2);
      sColValue := copy(sColValue,1,length(sColValue) - 2);
      //adoquery1设置自行处理
      with adoquery1 do
      begin
         close;
         sql.clear;
         sql.text := 'create table tO10(' + sColName + ');' +
                     'insert into tO10 select ' + sColValue;
         execsql;
      end;end;
      

  8.   

      日志-病毒-网络-操作系统-安全-c#-asp.net-java-delphi-sql-oracle学习资源
     在这里可以找找http://japee.com.cn/jew/bbs.aspx