我新建了一个excel表,里面没写任何内容,在delphi中我用ado与它进行了连接
(把excel当作一般的数据库来处理)。
由于此时在excel的sheet中,第一行是作为字段名来用的,所以我想在delphi中
用语句来动态地建立m个字段(m在程序运行时动态指定),字段名可以起为f1,f2...fm,之后就可以用“ADOQuery1.Fields(i).Value:=...”来添加数据了。
请问如何实现动态建立字段???
谢谢!!!
(把excel当作一般的数据库来处理)。
由于此时在excel的sheet中,第一行是作为字段名来用的,所以我想在delphi中
用语句来动态地建立m个字段(m在程序运行时动态指定),字段名可以起为f1,f2...fm,之后就可以用“ADOQuery1.Fields(i).Value:=...”来添加数据了。
请问如何实现动态建立字段???
谢谢!!!
解决方案 »
- 救命!!!!
- 工具栏怎么设置
- 窗口句柄问题不清?
- Ehlib出错安装问题
- Delphi 中Dll的出口函数的数据类型有什么限制吗?急?急?急?
- 100分求TDBChart的用法一例! 用饼状图形显示数据库中人员的文化程度所占的百分比?
- 急,如何判断文件保存过一次,保存按纽就失效,如果没有保存过,保存按纽就为真,有没有高招。。。
- 再次鼓励delphi fans与盒饭s ,发图一张,里程碑纪念一下
- 一个奇怪的问题,折腾了两天还没有搞定,请帮帮忙
- 有人知道怎样修改Tcombobox控件的height属性?
- 我用的sqlserver的数据库,把excel存在字段里,请问如何打开字段里的excel文件
- ACCESS数据库,aa为一字符串型的字段,选出其值为空的记录,怎么查不出来?
要完成你要的功能,我是这么做的:
先定义TSpreadSheet一块区域的名称;(通常以grid的形式显示);
然后将数据集遍历填入,定义好的电子表格区域中;区域定义在哪,就添到那,很灵活;
当然,如果你要以Freedom自由格式显示报表,你得定义每个字段的显示位置,这样,程序会自动将数据集的一行数据以自由报表的格式显示出来;
程序的关键:
1:定义电子表格的显示区域;
2:将数据集的数据遍历一下,一个一个的填入相应的Cell中;
这样做出的程序,通用性很好,至少,数据库中的数据可以自由的显示在电子表格控件中了;
当然导入到电子表格那就不成问题了;
我已经做到了,将xml数据导入,显示,导出,保存;
数据库数据集导入,导出,显示(grid和Freedom报表形式)
我上面提出的思路解决问题,即用ado控件来动态地建立m个字段,
例如:ADOQuery.Fields.Add(Field:TField)。谢谢!
qixin000(小齐):谢谢!
fontain():我试过,总是有问题,请你调试通过后再给我具体的代码。Thanks!
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]
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;