Office中国论坛/Access中国论坛

标题: 在adp中,使用TransferSpreadsheet,不能將查詢匯出至excel中? [打印本页]

作者: ADAM    时间: 2005-10-7 01:10
标题: 在adp中,使用TransferSpreadsheet,不能將查詢匯出至excel中?
我將mdb升遷至adp,但下面這條語句在mdb可正常執行,在adp中報錯:

"access中找不到此物件'bbb'"

bbb是一個視圖名稱.我將此名稱改為一個表的名稱,可正常執行.

又查閱了幫助文件,對這個參數的描述如下:









Table Name

欲匯入、匯出、或連結試算表資料之 Microsoft Access 資料表的名稱。您也可以鍵入欲從其中匯出資料之 Microsoft Access 選取查詢的名稱。這是一個必要的引數。





如果您在 Transfer Type 引數中選取了 Import,而此資料表已存在,則 Microsoft Access 會將試算表資料新增至該資料表。否則,Microsoft Access 會建立一個新的資料表,其中包含試算表資料。







在 Microsoft Access 2000 中,當您使用 TransferSpreadsheet 巨集指令時,您不能使用 SQL 陳述式來指定要匯出的資料。相對於使用 SQL 陳述式,您必須先建立一個查詢,並於 Table Name 引數中指定查詢的名稱。

按照以上所述,分明可用查詢的啊.真搞不懂.????

誰知道是怎麼回事啊.????

程式語句如下主要是粗體語句出錯)

Private Sub 用EXCEL輸入_Click()

On Error GoTo Err_執行EXCEL_Click

'On Error Resume Next

Dim oApp As Object

OUTPUT1 = "bbb"

INPUT_E = CurrentProject.Path & "\成品產量輸入表.xls"

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, output1, INPUT_E, True

Set oApp = GetObject(, "Excel.Application")

If Err.Number <> 0 Then Set oApp = CreateObject("Excel.Application")

oApp.UserControl = True

oApp.Visible = True

oApp.Application.Workbooks.Open INPUT_E

Set oApp = Nothing

Exit_執行EXCEL_Click:

    Exit Sub

Err_執行EXCEL_Click:

   MsgBox Err.Description

    Resume Exit_執行EXCEL_Click

End Sub

[此贴子已经被作者于2005-10-6 17:12:40编辑过]


作者: liguangming    时间: 2005-10-11 16:51
建议用宏来完成这个操作。
作者: ADAM    时间: 2005-10-11 18:13
嘿嘿,一樣的啊.且經過測試,報一樣的錯誤,找不到那個查詢.
作者: tzy0906    时间: 2005-10-13 23:54
经验证确实行不通
作者: tzy0906    时间: 2005-10-14 00:02
用SQL存储过程来完成呀你看看网上的例题--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:

insert  into  OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’

,’Excel  5.0;HDR=YES;DATABASE=c:\test.xls’,sheet1$)

select  *  from  表





--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:

--导出表的情况

EXEC  master..xp_cmdshell  ’bcp  数据库名.dbo.表名  out  "c:\test.xls"  /c  -/S"服务器名"  /U"用户名"  -P"密码"’



--导出查询的情况

EXEC  master..xp_cmdshell  ’bcp  "SELECT  au_fname,  au_lname  FROM  pubs..authors  ORDER  BY  au_lname"  queryout  "c:\test.xls"  /c  -/S"服务器名"  /U"用户名"  -P"密码"’



说明.



c:\test.xls    为导入/导出的Excel文件名.

sheet1$            为Excel文件的工作表名,一般要加上$才能正常使用.



  



下面是导出真正Excel文件的方法:





/*--数据导出EXCEL

  

  导出表中的数据到Excel,包含字段名,文件为真正的Excel文件

  ,如果文件不存在,将自动创建文件

  ,如果表不存在,将自动创建表

  基于通用性考虑,仅支持导出标准数据类型

---*/



/*--调用示例



  p_exporttb  @tbname=’地区资料’,@path=’c:\’,@fname=’aa.xls’

--*/

if  exists  (select  *  from  dbo.sysobjects  where  id  =  object_id(N’[dbo].[p_exporttb]’)  and  OBJECTPROPERTY(id,  N’IsProcedure’)  =  1)

drop  procedure  [dbo].[p_exporttb]

GO



create  proc  p_exporttb

@tbname  sysname,        --要导出的表名,注意只能是表名/视图名

@path  nvarchar(1000),      --文件存放目录

@fname  nvarchar(250)=’’    --文件名,默认为表名

as

declare  @err  int,@src  nvarchar(255),@desc  nvarchar(255),@out  int

declare  @obj  int,@constr  nvarchar(1000),@sql  varchar(8000),@fdlist  varchar(8000)



--参数检测

if  isnull(@fname,’’)=’’  set  @fname=@tbname+’.xls’



--检查文件是否已经存在

if  right(@path,1)<>’\’  set  @path=@path+’\’

create  table  #tb(a  bit,b  bit,c  bit)

set  @sql=@path+@fname

insert  into  #tb  exec  master..xp_fileexist  @sql



--数据库创建语句

set  @sql=@path+@fname

if  exists(select  1  from  #tb  where  a=1)

  set  @constr=’DRIVER={Microsoft  Excel  Driver  (*.xls)};DSN=’’’’;READONLY=FALSE’

              +’;CREATE_DB="’+@sql+’";DBQ=’+@sql

else

  set  @constr=’Provider=Microsoft.Jet.OLEDB.4.0;Extended  Properties="Excel  5.0;HDR=YES’

        +’;DATABASE=’+@sql+’"’



--连接数据库

exec  @err=sp_oacreate  ’adodb.connection’,@obj  out

if  @err<>0  goto  lberr



exec  @err=sp_oamethod  @obj,’open’,null,@constr

if  @err<>0  goto  lberr



--创建表的SQL

select  @sql=’’,@fdlist=’’

select  @fdlist=@fdlist+’,’+a.name

  ,@sql=@sql+’,[’+a.name+’]  ’

    +case  when  b.name  in(’char’,’nchar’,’varchar’,’nvarchar’)  then

          ’text(’+cast(case  when  a.length>255  then  255  else  a.length  end  as  varchar)+’)’

      when  b.name  in(’tynyint’,’int’,’bigint’,’tinyint’)  then  ’int’

      when  b.name  in(’smalldatetime’,’datetime’)  then  ’datetime’

      when  b.name  in(’money’,’smallmoney’)  then  ’money’

      else  b.name  end

FROM  syscolumns  a  left  join  systypes  b  on  a.xtype=b.xusertype

where  b.name  not  in(’image’,’text’,’uniqueidentifier’,’sql_variant’,’ntext’,’varbinary’,’binary’,’timestamp’)

  and  object_id(@tbname)=id

select  @sql=’create  table  [’+@tbname

  +’](’+substring(@sql,2,8000)+’)’

  ,@fdlist=substring(@fdlist,2,8000)



exec  @err=sp_oamethod  @obj,’execute’,@out  out,@sql

if  @err<>0  goto  lberr



exec  @err=sp_oadestroy  @obj



--导入数据

set  @sql=’openrowset(’’MICROSOFT.JET.OLEDB.4.0’’,’’Excel  5.0;HDR=YES

      ;DATABASE=’+@path+@fname+’’’,[’+@tbname+’$])’



exec(’insert  into  ’+@sql+’(’+@fdlist+’)  select  ’+@fdlist+’  from  ’+@tbname)



return



lberr:

  exec  sp_oageterrorinfo  0,@src  out,@desc  out

lbexit:

  select  cast(@err  as  varbinary(4))  as  错误号

    ,@src  as  错误源,@desc  as  错误描述

  select  @sql,@constr,@fdlist

go



  



*--数据导出EXCEL

  

  导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件


作者: ADAM    时间: 2005-10-14 01:29
十分感謝

不過一看到這麼一長串代碼我就暈了.有簡單的代碼就好了

還不如使用笨辦法,將查詢先匯到一個表中,再從表中匯出去.


作者: 徐阿鹏    时间: 2005-10-15 03:29
直接调用office的excel发布的按钮
作者: ADAM    时间: 2005-10-16 16:27
萬分感謝,是我糊涂了.其實原來用過這個,后來見匯出的格式不對,就放在一邊了現在在ADP中,還是要用這個才行,唉.后來語句改為如下,OK.DoCmd.OutputTo acOutputServerView, "BBB", acFormatXLS, "E:\BBB\T1.XLS", True






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3