数据库转EXCEL问题(50分)

  • 主题发起人 主题发起人 fwcy
  • 开始时间 开始时间
F

fwcy

Unregistered / Unconfirmed
GUEST, unregistred user!
本人写了一个数据库转EXCEL过程,但执行时在excel中却无法导出数据。
procedure Tfm_bf.BitBtn3Click(Sender: TObject);
var row, i: integer;
begin
if SaveDialog1.Execute then
begin
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(Null, 0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);

ExcelWOrkSheet1.Cells.Item[1, 1] := '银行帐号';
ExcelWOrkSheet1.Cells.Item[1, 2] := '姓名';
ExcelWOrkSheet1.Cells.Item[1, 3] := '工资';
query1.Close;
Query1.SQL.Clear;
query1.SQL.Add('select * from gz ');
Query1.Prepare;
query1.ExecSQL;


row := 2;

while not Query1.Eof do
begin
for i := 0 to Query1.Fields.Count - 1 do
begin
ExcelWOrkSheet1.Cells.Item[row, i + 1] := Query1.Fields.AsString;
end;
row := row + 1;
Query1.Next;
end;



ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName);
ExcelWOrkBook1.Close(false);

ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
Screen.Cursor := crDefault;
Application.MessageBox('保存完毕!', '消息', 0);
end;

 
出错在什么地方? 或者有什么现象?
 
TO:LICH007
在EXCEL中无法显示"select * from gz "中的数据.
 
这个问题难吗?分不够再加!
 
改成如下,ExecSql不返回执行结果,用于执行Insert、Update或Delete语句。
...
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select * from gz ');
Query1.Prepare;
Query1.Open;
...
 
>>query1.ExecSQL;
楼上已经说了,是不是这个问题?
 
是呀,把EXECSQL改写成OPEN就可以显示数据啦。
但转换后又有一问题,数据库中银行帐号本来是477100701880057614,
但转换后银行帐号却变成了4.77101E+17这种形式。
该如何解决?
 
把数据库中帐号字段的数字格式换成文本格式试试
看看我回答过的一个类似的范例:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1336647
 
将其强制为文本就可以了
'477100701880057614
 
在循环中加入如下语句,设置单元格格式为文本

ExcelWOrkSheet1.cells[row,i+1].NumberFormatLocal:='@';
 
TO:Quicksilver
在循环中加入ExcelWOrkSheet1.cells[row,i+1].NumberFormatLocal:='@'不行,
和原来一样!
while not Query1.Eof do
begin
for i := 0 to Query1.Fields.Count - 1 do
begin
ExcelWOrkSheet1.Cells.Item[row, i + 1] := Query1.Fields.AsString;
ExcelWOrkSheet1.cells[row,i+1].NumberFormatLocal:='@';
end;
row := row + 1;
Query1.Next;
end;

 
TO:Quicksilver
按照你的设置调试通过了。非常感谢!!!
不过ExcelWOrkSheet1.cells[row,i+1].NumberFormatLocal:='@';应该是
ExcelWOrkSheet1.cells.item[row,i+1].NumberFormatLocal:='@';
 
后退
顶部