非常奇怪的问题!在delphi中excel表格打开出错,各位帮帮忙!
非常奇怪的问题!在delphi中excel表格打开出错,各位帮帮忙!
楼主()2001-10-29 10:05:47 在 Delphi / VCL组件开发及应用 提问 用ado打开excel表格,在设计时可以打开,在运行时出现错误,提示为文件已被其他程序独占开启或者没有权限打开此文件,但我并没有程序打开此文件,用bde也是一样提示
ado connection string为Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=c:\05.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don"t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
请各位帮忙!!
问题点数:30、回复次数:20Top
1 楼Focus(Philosopher)回复于 2001-10-29 10:19:33 得分 0
Mode=Share Deny none
改一下试试Top
2 楼cobi(我是小新)回复于 2001-10-29 10:27:06 得分 0
同一楼上Top
3 楼lsan78(刚刚入门)回复于 2001-10-29 10:34:18 得分 0
还是一样的错误Top
4 楼Focus(Philosopher)回复于 2001-10-29 10:37:13 得分 0
你的connection太长了
先精简一下再说Top
5 楼lsan78(刚刚入门)回复于 2001-10-29 10:42:39 得分 0
你认为应该怎样精简,我在设计状态可以打开,并且可以看到excel文件的内容Top
6 楼Focus(Philosopher)回复于 2001-10-29 10:43:33 得分 0
测试一下
等等
Top
7 楼lsan78(刚刚入门)回复于 2001-10-29 10:46:12 得分 0
好的,先谢过了Top
8 楼Focus(Philosopher)回复于 2001-10-29 11:12:41 得分 0
试出毛病所在了
你不能在设计期间将adoconnection 和adotable
的active打开
必须在运行时打开
这样才行
Top
9 楼lsan78(刚刚入门)回复于 2001-10-29 11:34:24 得分 0
始终是一样的Top
10 楼Focus(Philosopher)回复于 2001-10-29 11:40:55 得分 0
不可能
我刚试过
mode是readwrite
一开始我也得到了相同的错误
后来改了以后不管是在哪运行都没事
不信的话我可以发给你
excel表用的是office下的sample
Top
11 楼Focus(Philosopher)回复于 2001-10-29 12:07:21 得分 0
走人了吗Top
12 楼txmaster(海)回复于 2001-10-29 12:14:21 得分 0
使用ADO连接EXCEL表格,Delphi将设置这个表格为“独占”,哪怕你在设计环境中已经开启了
ADO连接,当运行时就会出错。Top
13 楼lsan78(刚刚入门)回复于 2001-10-29 13:35:58 得分 0
如果改为readwrite则出现"灾难性的错误"
Top
14 楼Focus(Philosopher)回复于 2001-10-29 13:44:09 得分 0
你把你的模块压缩一下发给我
我就不信了!!!
MJC@chinese.comTop
15 楼jdxjf(生活象拉磨,我就是那拉磨的驴)回复于 2001-10-29 14:07:03 得分 0
你在进入论坛后,点搜索一项,输入Excel,可以找到答案,我昨天这样做的.Top
16 楼jdxjf(生活象拉磨,我就是那拉磨的驴)回复于 2001-10-29 14:08:58 得分 0
unit UExcelTools;
interface
uses
classes, comctrls, stdctrls, windows, Dialogs, controls, SysUtils,
Db,forms,DBClient,ComObj;
//把数据集导入ExcelSheet的核心函数
function DataSetToExcelSheet
(
DataSet :TDataSet;
FieldTagMax :Integer; // 字段的Tag值如果大于这个值,就不导出到Excel
Sheet :OleVariant
): Boolean;
//实际使用的函数,内部调用了DataSetToExcelSheet,在外面加入UI接口和错误处理
function DataSetToExcel
(
DataSet :TDataSet; // 要转换的数据集
FieldTagMax :Integer; // 字段的Tag值如果大于这个值,就不导出到Excel
Visible :Boolean; // 是否让做转换工作的Excel可见
ExcelFileName:String="" // Excel文件名,*.xls
): Boolean;
implementation
Function DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant): Boolean;
var
Row,Col,FieldIndex :Integer;
BK:TBookMark;
begin
Result := False;
if not Dataset.Active then exit;
BK:=DataSet.GetBookMark;
DataSet.DisableControls;
Sheet.Activate;
try
// 列标题
Row:=1;
Col:=1;
for FieldIndex:=0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields.Tag <= FieldTagMax then
begin
Sheet.Cells(Row,Col) :=DataSet.Fields.DisplayLabel;
Inc(Col);
end;
end;
// 表内容
DataSet.First;
while Not DataSet.Eof do
begin
Row:=Row+1;
Col:=1;
for FieldIndex:=0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields.Tag <= FieldTagMax then
begin
Sheet.Cells(Row,Col):=DataSet.Fields.AsString;
Inc(Col);
end;
end;
DataSet.Next;
end;
Result := True;
finally
DataSet.GotoBookMark(BK);
DataSet.EnableControls;
end;
end;
Function DataSetToExcel(
DataSet:TDataSet;FieldTagMax:Integer;
Visible:Boolean;ExcelFileName:String=""): Boolean;
var
ExcelObj, Excel, WorkBook, Sheet: OleVariant;
OldCursor:TCursor;
SaveDialog:TSaveDialog;
begin
Result := False;
if not Dataset.Active then exit;
OldCursor:=Screen.Cursor;
Screen.Cursor:=crHourGlass;
try
ExcelObj := CreateOleObject("Excel.Sheet");
Excel := ExcelObj.Application;
Excel.Visible := Visible ;
WorkBook := Excel.Workbooks.Add ;
Sheet:= WorkBook.Sheets;
except
MessageBox(GetActiveWindow,"无法调用Mircorsoft Excel! "+chr(13)+chr(10)+
"请检查是否安装了Mircorsoft Excel。","提示",MB_OK+MB_ICONINFORMATION);
Screen.Cursor:=OldCursor;
Exit;
end;
Result:=DataSetToExcelSheet(DataSet,FieldTagMax,Sheet) ;
if Result then
if Not Visible then
begin
if ExcelFileName<>""
then WorkBook.SaveAs(FileName:=ExcelFileName)
else begin
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := "Microsoft Excel 文件¦*.xls";
Result:=SaveDialog.Execute;
UpdateWindow(GetActiveWindow);
if Result then
WorkBook.SaveAs(FileName:=SaveDialog.FileName);
SaveDialog.Free;
end;
Excel.Quit;
end;
Screen.Cursor:=OldCursor;
end;
end.Top
17 楼Focus(Philosopher)回复于 2001-10-29 14:56:02 得分 0
收到了
连接方式不对
不能用oledb
oledb只能针对支持sql的数据库
比如access和sqlserver
必须用odbc方式连接才行
先定义了odbc数据源再用就没问题了Top
18 楼Focus(Philosopher)回复于 2001-10-29 15:03:48 得分 0
OK
上面的说法有点问题
我已试好给你发回去Top
19 楼Focus(Philosopher)回复于 2001-10-29 15:13:59 得分 30
快查收邮件
你的问题已解决了Top
20 楼lsan78(刚刚入门)回复于 2001-10-29 19:28:18 得分 0
多谢了,不知道你改了什么地方,请详细说明Top
-
相关文章
