tempad
Readygo技术搜索引擎 >>软件测试 >> 非常奇怪的问题!在delphi中excel表格打开出错,各位帮帮忙!

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

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 9:39:45

非常奇怪的问题!在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   文件&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(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

责任编辑: efish 参与评论 查找更多:
相关文章
有问题,需要大家帮助! 有问题,需要大家帮助!
怎样在FLASH动画中加入网站地址的超级链接? 怎样在FLASH动画中加入网站地址的超级链接?
在一个页面中点击一个按钮打开另外一个窗口,并使这个… 在一个页面中点击一个按钮打开另外一个窗口,并使这个窗口是从屏幕的上到下移动呢?在原来那个页面点击按钮把打开的那个窗口关闭!应该怎么
通过点击不同的按钮 来显示不同的层,怎么写呀?40分… 通过点击不同的按钮 来显示不同的层,怎么写呀?40分送上
问个按钮的问题 问个按钮的问题
请教:使用CAsyncSocket::Connect连接局域网内服务器… 请教:使用CAsyncSocket::Connect连接局域网内服务器Socket的问题:参数lpszHostAddress......
tomcat+jsp开发问题:从一servlet传递一中文字符串到… tomcat+jsp开发问题:从一servlet传递一中文字符串到另一JSP页面,JSP页面第一次取出正常,但一刷新之后中文字符串却变成了乱码!
如何把别的pbt中的dw复制到本来的pbt中? 如何把别的pbt中的dw复制到本来的pbt中?
能否提供几个多媒体制作下载的网站 能否提供几个多媒体制作下载的网站
--------有关dreamweaver层的问题,你见过没有------… --------有关dreamweaver层的问题,你见过没有---------?
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎