我新建了一个excel表,里面没写任何内容,在delphi中我用ado与它进行了连接
(把excel当作一般的数据库来处理)。
由于此时在excel的sheet中,第一行是作为字段名来用的,所以我想在delphi中
用语句来动态地建立m个字段(m在程序运行时动态指定),字段名可以起为f1,f2...fm,之后就可以用“ADOQuery1.Fields(i).Value:=...”来添加数据了。
请问如何实现动态建立字段???
    谢谢!!!

解决方案 »

  1.   

    我喜欢用电子表格控件TSpreadSheet,操作它跟操作电子表格一样,而且更简单,所以建议用控件,然后利用它自己的功能,自动导入到电子表格中去,
    要完成你要的功能,我是这么做的:
    先定义TSpreadSheet一块区域的名称;(通常以grid的形式显示);
    然后将数据集遍历填入,定义好的电子表格区域中;区域定义在哪,就添到那,很灵活;
    当然,如果你要以Freedom自由格式显示报表,你得定义每个字段的显示位置,这样,程序会自动将数据集的一行数据以自由报表的格式显示出来;
    程序的关键:
    1:定义电子表格的显示区域;
    2:将数据集的数据遍历一下,一个一个的填入相应的Cell中;
        这样做出的程序,通用性很好,至少,数据库中的数据可以自由的显示在电子表格控件中了;
    当然导入到电子表格那就不成问题了;
        我已经做到了,将xml数据导入,显示,导出,保存;
        数据库数据集导入,导出,显示(grid和Freedom报表形式)
      

  2.   

    sql语句:alter table tablename Add aa....
      

  3.   

    请大家注意:我已经用别的几种方法实现了,但用这种方法时总是出错,请各位按
    我上面提出的思路解决问题,即用ado控件来动态地建立m个字段,
    例如:ADOQuery.Fields.Add(Field:TField)。谢谢!
    qixin000(小齐):谢谢!
    fontain():我试过,总是有问题,请你调试通过后再给我具体的代码。Thanks!
      

  4.   

    begin
      with TAdoConnection.Create(nil) do try
         ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\aaa.xls;Extended Properties=Excel 8.0;Persist Security Info=False';
         Open;
         Execute('Create Table MyTable (A Text);');
         Execute('Alter TABLE MyTable Add Column B TEXT;');
         Close;
      finally
         free;
      end;
    end;
    注意,不能用空表,空表没字段名本来就不符合格式
    这段代码已经调试通过,有问题可以给我发短消息,或者写信,我的email:[email protected]
      

  5.   

    TSpreadSheet是OfficeXP光盘上的东东,其中有一个OWC安装,安装上后即可,在Delphi中导入类型库,安装组件;
      

  6.   

    使用ole阿,我给你代码阿procedure TTfrm_ZHCX.BitBtn5Click(Sender: TObject);
    var
      range:excelrange;
      i,j:integer;
      letter:char;
    begin
    if  not datasource1.DataSet.Active then showmessage('目前表单没有内容,无内容可以导入Excel!') else
    if messagedlg('是否把查询分析内容导入到Excel?',mtconfirmation,[mbyes,mbno],0)=mryes then
      try
        try
        excelapplication1.Connect;
        except
        showmessage('您的机器没有安装Excel!');
        abort;
        end;
        excelapplication1.Visible[0]:=true;
        excelapplication1.Caption:='查询分析内容';
        excelapplication1.Workbooks.Add(NUll,0);    i:=65+datasource1.DataSet.FieldCount-1;
        letter:=char(i);    range:=excelapplication1.Range['A1',letter+'1'];    for i:=0 to datasource1.DataSet.FieldCount-1 do
          begin
          range.Value:=datasource1.DataSet.Fields[i].DisplayLabel;
          range:=range.Next;
          end;    datasource1.DataSet.First;    for i:=1 to datasource1.DataSet.RecordCount do begin
          range:=excelapplication1.Range['A'+inttostr(i+1),letter+inttostr(i+1)];
          for j:=0 to datasource1.DataSet.FieldCount-1 do begin
            if not datasource1.DataSet.Fields[j].IsBlob then
            range.Value:=datasource1.DataSet.Fields[j].AsString
            else range.Value:='不支持图片显示';
            range:=range.Next;
            end;
          datasource1.DataSet.Next;
          end;  except
      excelapplication1.Disconnect;
      end;
    end;