首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

从数据库导出到客户端excel中,用的是邹建大哥的程序,提示异常,不知道怎么解决

2012-01-01 
从数据库导出到客户端excel中,用的是邹建大哥的程序,提示错误,不知道如何解决机器装的是office2003sqlserv

从数据库导出到客户端excel中,用的是邹建大哥的程序,提示错误,不知道如何解决
机器装的是office2003
sqlserver2000

运行时查询分析器提示错误如下:

0x80004005
Microsoft   OLE   DB   Provider   for   ODBC   Drivers        
[Microsoft][ODBC   驱动程序管理器]   未发现数据源名称并且未指定默认驱动程序


c:\aa.xls
DRIVER={Microsoft       Excel       Driver       (*.xls)};DSN= '192.168.25.200 ';READONLY=FALSE;CREATE_DB= "c:\aa.xls ";DBQ=c:\aa.xls


运行代码如下:
exec   p_exporttb     @sqlstr= 'select       *       from       ffc ',@path= 'c:\ ',@fname= 'aa.xls ',@sheetname= '地区资料 '  


源程序如下,没有修改过
    CREATE       proc       p_exporttb      
    @sqlstr       varchar(8000),   --查询语句,如果查询语句中使用了order       by       ,请加上top       100       percent      
    @path       nvarchar(1000),   --文件存放目录      
    @fname       nvarchar(250),   --文件名      
    @sheetname       varchar(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= 'temp.xls '      
    if       isnull(@sheetname, ' ')= ' '       set       @sheetname=replace(@fname, '. ', '# ')      
       
    --检查文件是否已经存在      
    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       8.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      
    declare       @tbname       sysname      
    set       @tbname= '##tmp_ '+convert(varchar(38),newid())      
    set       @sql= 'select       *       into       [ '+@tbname+ ']       from( '+@sqlstr+ ')       a '      
    exec(@sql)      
       
    select       @sql= ' ',@fdlist= ' '      
    select       @fdlist=@fdlist+ ',[ '+a.name+ '] '      
    ,@sql=@sql+ ',[ '+a.name+ ']       '      
    +case          
    when       b.name       like       '%char '          
    then       case       when       a.length> 255       then       'memo '      
    else       'text( '+cast(a.length       as       varchar)+ ') '       end      
    when       b.name       like       '%int '       then       'int '      
    when       b.name       like       '%datetime '       then       'datetime '      
    when       b.name       like       '%money '       then       'money '      
    when       b.name       like       '%text '       then       'memo '      
    else       b.name       end      
    FROM       tempdb..syscolumns       a       left       join       tempdb..systypes       b       on       a.xtype=b.xusertype      


    where       b.name       not       in( 'image ', 'uniqueidentifier ', 'sql_variant ', 'varbinary ', 'binary ', 'timestamp ')      
    and       a.id=(select       id       from       tempdb..sysobjects       where       name=@tbname)      
       
    if       @@rowcount=0       return      
       
    select       @sql= 'create       table       [ '+@sheetname      
    + ']( '+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       8.0;HDR=YES      
    ;DATABASE= '+@path+@fname+ ' ' ',[ '+@sheetname+ '$]) '      
       
    exec( 'insert       into       '+@sql+ '( '+@fdlist+ ')       select       '+@fdlist+ '       from       [ '+@tbname+ '] ')      
       
    set       @sql= 'drop       table       [ '+@tbname+ '] '      
    exec(@sql)      
    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




[解决办法]
打sp4补丁
[解决办法]
有可能是权限方面的问题造成的
[解决办法]
一般提示这种错误,都是因为驱动名称写错了,如:多输入了空格或拼写错误。

热点排行