将Access中的数据转入Excel中存在缺陷吗? (50分)

  • 主题发起人 yaminboy
  • 开始时间
Y

yaminboy

Unregistered / Unconfirmed
GUEST, unregistred user!
在我下面的程序中存二个尚不清楚的问题:
1、程序中第二次循环的目的,是要把另一数据表中每一个人都包括几年中数字转入Excel中,
可是程序运行后Excel中没有数字,不知是什么原因?
2、此程序如果遇到保存的文件重名或强行中断后,再打开生成的excel表后容易出错,造成excel无法正确打开,重新启动excel恢复正常。
  以上二点问题请富翁们帮帮忙,谢谢!

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj,Grids, DBGrids, DB, DBTables;

type
TForm1 = class(TForm)
Database1: TDatabase;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Query2: TQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
eclApp,WorkBook:Variant;
xlsFileName,stxm,stxb,stbm,strybm:string;
i:integer;
begin
xlsFileName:='e:/access_excel/grzh.xls';
try
//创建OLE对象:Excel Application 与 WorkBook
eclApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleObject('Excel.Sheet');
WorkBook:=eclApp.workBooks.Open(xlsFileName);
except
ShowMessage('您的机器里未安装Microsoft Excel.');
Exit;
end;
i:=14;
query1.Active:=true;
query1.First;
Query2.Active:=true;
query2.First;
EclApp.Visible := False;
while not query1.Eof do begin
stbm:=query1.Fields[0].AsString;
stxm:=query1.Fields[1].AsString;
stxb:=query1.Fields[2].AsString;
WorkBook.WorkSheets[1].Cells[6,6].Value := stxm;
if stxb='0' then
WorkBook.WorkSheets[1].Cells[6,9].Value := '男'
else
WorkBook.WorkSheets[1].Cells[6,9].Value := '女';
strybm:=query2.Fields[3].AsString;
while stbm=strybm do begin
WorkBook.WorkSheets[1].Cells[3,i].Value := query2.Fields[1].AsInteger;
WorkBook.WorkSheets[1].Cells[4,i].Value := query2.Fields[2].AsInteger;
i:=i+1;
strybm:=query2.Fields[3].AsString;
query2.next;
end;
WorkBook.saveas('e:/access_excel/'+ stxm + '.xls');
query1.next;
end;

WorkBook.close;
EclApp.Quit;
EclApp:=Unassigned; //释放VARIANT变量
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
end.
 
对于第3个问题,可以把Database1.Loginprompt设为False,就不会出来那个窗口了。
对于第2个问题,可以先判断一下文件是不是存在(fileexists),存在,则不保存。
对于第1个问题,你可以不采用这种方式,这种方式比较慢。采用clipboard的方式比较快
 
to twos;
请你说得详细些,对于你回答的第一个问题我还不大明白。首先感谢你回答的第三问题,讨论结束一定加分。

为了突出我的主要问题,我将修改我的提问,谢谢!
 
还是没有人来答,如果是分数的话,愿再加50分。


另外本人又遇到一点困难,怎样用程序方法删除Access数据库中某一数据表里的全部记录???
 
excel有一种叫逗号分隔的格式,*.csv
所以你可以把生成的数据生成此格式excel格式即可
例如
日期,金额1,金额2,总额
2002-01-01,3.5,3.8,7.3
2002-02-01,8.3,7.7,15.0
 
永程序删除access和删除其他数据库中表述据有什么不同吗?
不就是database连接dataset,用sql语句实现吗?
 
接受答案
 
多人接受答案了。
 
顶部