CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

非常奇怪的问题!在delphi中excel表格打开出错,各位帮帮忙!

楼主lsan78(刚刚入门)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(西门大灌人)回复于 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(西门大灌人)回复于 2001-10-29 10:37:13 得分 0

你的connection太长了  
  先精简一下再说Top

5 楼lsan78(刚刚入门)回复于 2001-10-29 10:42:39 得分 0

你认为应该怎样精简,我在设计状态可以打开,并且可以看到excel文件的内容Top

6 楼Focus(西门大灌人)回复于 2001-10-29 10:43:33 得分 0

测试一下  
  等等  
  Top

7 楼lsan78(刚刚入门)回复于 2001-10-29 10:46:12 得分 0

好的,先谢过了Top

8 楼Focus(西门大灌人)回复于 2001-10-29 11:12:41 得分 0

试出毛病所在了  
  你不能在设计期间将adoconnection   和adotable  
  的active打开  
  必须在运行时打开  
  这样才行  
  Top

9 楼lsan78(刚刚入门)回复于 2001-10-29 11:34:24 得分 0

始终是一样的Top

10 楼Focus(西门大灌人)回复于 2001-10-29 11:40:55 得分 0

不可能  
  我刚试过  
  mode是readwrite  
  一开始我也得到了相同的错误  
  后来改了以后不管是在哪运行都没事  
  不信的话我可以发给你  
  excel表用的是office下的sample  
  Top

11 楼Focus(西门大灌人)回复于 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(西门大灌人)回复于 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[FieldIndex].Tag   <=   FieldTagMax   then  
                          begin  
                          Sheet.Cells(Row,Col)     :=DataSet.Fields[FieldIndex].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[FieldIndex].Tag   <=   FieldTagMax   then  
                              begin  
                              Sheet.Cells(Row,Col):=DataSet.Fields[FieldIndex].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[1];  
      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   文件&brvbar;*.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(西门大灌人)回复于 2001-10-29 14:56:02 得分 0

收到了  
  连接方式不对  
  不能用oledb  
  oledb只能针对支持sql的数据库  
  比如access和sqlserver  
  必须用odbc方式连接才行  
  先定义了odbc数据源再用就没问题了Top

18 楼Focus(西门大灌人)回复于 2001-10-29 15:03:48 得分 0

OK  
  上面的说法有点问题  
  我已试好给你发回去Top

19 楼Focus(西门大灌人)回复于 2001-10-29 15:13:59 得分 30

快查收邮件  
  你的问题已解决了Top

20 楼lsan78(刚刚入门)回复于 2001-10-29 19:28:18 得分 0

多谢了,不知道你改了什么地方,请详细说明Top

相关问题

  • 将DataGrid中的数据记录到为Excel表格,出错!
  • 如何通过Delphi程序给Excel表格设置表格线?
  • 急!!!excel表格
  • excel表格
  • ewebeditor 中表格出错的问题
  • java读excel出错
  • datagride到Excel出错
  • delphi里如何实现excel 表格替代dbgrid!火急!!!
  • 存取Excel表格
  • 打开Excel表格

关键词

  • excel
  • 文件
  • 数据
  • database
  • jet oledb
  • savedialog
  • datasettoexcelsheet
  • fieldtagmax
  • 打开
  • tdataset

得分解答快速导航

  • 帖主:lsan78
  • Focus

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo