关于VB6.0 SQL2005 Excel

本文的方法均已亲自验证

EXCEL 与 SQL数据库
SQL2005 导出成 Excel

方法一 导出SQL查询到Excel (Excel不存在)
前提:使用SQL Server2005 外围应用配置器――“功能的外围应用配置器”――开启xp_cmdshell功能
EXEC master..xp_cmdshell
'bcp "SELECT Id,Campaign_Code,Unique_Id,CreateDate From SZF02D253.DRTV.dbo.Campaign_Source ORDER BY Id" queryout "c:\test.xls" -c -S "SZF02D253" -U "sa" -P "wayne"'
说明.
以上语句最好写在同一行。xp_cmdshell 处可以换行,但是之后的后面的字符串( ‘….’) 必须写成一行,不能进行换行,否则会出错。
参数 c:\test.xls :为导出的Excel文件名
参数 SZF02D253.DRTV.dbo.Campaign_Source :服务器名+数据库+所有者+表名
参数 -S "SZF02D253" : 服务器名,也可以用IP代替,即写成 -S "10.131.44.159"
参数 -U "sa" :SQL账户名
参数 -P "wayne" :SQL账户密码
注意:可以自动生成Excel文件。若Excel文件不存在,则自动产生文件;若文件存在,则覆盖原来的文件。

方法二 导出数据表到Excel(Excel不存在)
前提 1:使用SQL Server2005 外围应用配置器――“功能的外围应用配置器”――开启“xp_cmdshell” 功能
EXEC master..xp_cmdshell
'bcp DRTV.dbo.Campaign_Source out "c:\test3.xls" -c -S "SZF02D253" -U "sa" -P "wayne"'
说明
参数 DRTV.dbo.Campaign_Source :数据库+所有者+表名 ,在这里不能用 “服务器名+数据库+所有者+表名”。
参数 c:\test3.xls :为导出的Excel文件名。
注意:可以自动生成Excel文件。若Excel文件不存在,则自动产生文件;若文件存在,则覆盖原来的文件。

方法三 导出数据表到Excel(Excel已存在)
前提 1:使用SQL Server2005 外围应用配置器――“功能的外围应用配置器”――开启“即席远程查询”功能(即 OPENROWSET 和 OPENDATASOURCE)
前提 2:Excel文件已经存在,工作表(固定名称)已经存在,要导出的列在工作表中已经设置好,工作表中列的顺序必须与SQL语句中字段顺序一致。
INSERT INTO OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\test4.xls',ImportData$)
SELECT Id,CreateDate
FROM SZF02D253.DRTV.dbo.Campaign_Source
说明
参数 c:\test4.xls :为导出的Excel文件名
参数 ImportData$ :其中ImportData为Excel文件中工作表名,$符号必须带上,作用不祥。
参数 SZF02D253.DRTV.dbo.Campaign_Source :服务器名+数据库+所有者+表名
参数 Id,CreateDate :是要导出的列,这些列必须在 ImportData 工作表中设置好,并且字段顺序一致

方法四 导出数据表到Excel(综合以上各种方法,强烈推荐)
前提 1:使用SQL Server2005 外围应用配置器――“功能的外围应用配置器”――开启“即席远程查询”功能(即 OPENROWSET 和 OPENDATASOURCE)
前提 2:使用SQL Server2005 外围应用配置器――“功能的外围应用配置器”――开启“OLE 自动化”功能
前提 3:使用SQL Server2005 外围应用配置器――“功能的外围应用配置器”――开启“xp_cmdshell” 功能
前提 4:创建下面的存储过程 ExportExcel
前提 5:调用 ExportExcel ,并提供相关参数
/*
存储过程:将查询结果导出到Excel (仅支持导出标准数据类型)
以下情形可以正常运行
1、Excel文件不存在,将自动创建文件及WorkSheet.
2、Excel文件存在,WorkSheet不存在,将自动在Excel文件中新建WorkSheet.
3、Excel文件存在,WorkSheet存在,且WorkSheet中定义的字段包含了所有查询结果的字段(字段先后顺序可不一致)

以下情形将报错
1、Excel文件存在,WorkSheet存在,但WorkSheet中未定义字段,则报错.
2、Excel文件存在,WorkSheet存在,但WorkSheet中定义的字段少于查询结果字段,则报错.

*/

IF EXISTS ( SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[ExportExcel]')
AND OBJECTPROPERTY(id,N'IsProcedure') = 1 )
DROP PROCEDURE [dbo].[ExportExcel]
GO
CREATE PROC ExportExcel
@sqlstr SYSNAME,--查询语句
@path NVARCHAR(1000),--Excel文件存放目录
@fname NVARCHAR(250),--Excel文件名
@sheetname VARCHAR(250) = '' --WorkSheet工作表名,默认为文件名
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 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
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 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 tempdb..syscolumns a
LEFT JOIN tempdb..systypes b ON a.xtype = b.xusertype
WHERE b.name NOT IN ( 'image','text','uniqueidentifier','sql_variant',
'ntext','varbinary','binary','timestamp' )
AND a.id = ( SELECT id
FROM tempdb..sysobjects
WHERE name = @tbname
)
SELECT @sql = 'create table [' + @sheetname + '](' + SUBSTRING(@sql,2,
8000) + ')',
@fdlist = SUBSTRING(@fdlist,8000)

EXEC @err= sp_oamethod @obj,'execute',@out OUT,@sql --执行

EXEC @err= sp_oamethod @obj,'close' --关闭,若不关闭SQL进程将一直占用此Excel文件。

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 + ''',[' + @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

/*
--调用示例
EXEC ExportExcel
@sqlstr='select * from order',
@path='c:\',
@fname='aa.xls',
@sheetname='OrderSheet'
--如果查询语句中使用了order by,请加上top 100 percent
*/
Excel 导入 SQL2005

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")