sql server 导出报表的几种方法.docx
- 文档编号:6488010
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:8
- 大小:114.50KB
sql server 导出报表的几种方法.docx
《sql server 导出报表的几种方法.docx》由会员分享,可在线阅读,更多相关《sql server 导出报表的几种方法.docx(8页珍藏版)》请在冰豆网上搜索。
sqlserver导出报表的几种方法
SQLServer数据表在编程中实现导出EXCEL几种方法
---快速将SQLServer数据库表(或网格控件)数据导出EXCEL
关键字:
SQLServer2000、Select高级查询、MsFlexGrid、MsHFlexGrid、ListView、EXCEL和VB6
前言:
目前,随着电脑技术知识的广泛普及,掌握微软Office办公软件的技术人员(一般办公人员)队伍逐渐加速扩大;促使多数商用软件如:
MIS、ERP、MRP等系统在解决数据输出方面,(除数据显示和打印功能外)都多了一项任务,即将数据导出EXCEL文件的功能。
这个“转换”技术并不难,主要是将数据库编程技术与OfficeExcel文件的建立、存储技术有机地结合就会把这个问题解决。
以下是我们在设计开发软件中,解决数据导出EXCEL实例,方法及相关的事宜。
具体说明如下:
一、采用SQLServer数据库导出EXCEL文件原由和方法
在SQLServer数据库系统中已经提供了非常丰富的实现表导入、导出的方法,而我们又重复此举的必要性何在呢?
回答:
有必要。
只要对用户实际工作有利有益,我们就要做,还要做好,让其到位。
⑴.其原由:
用户需要数据的结果集不是大量静态表的数据,而是经过Select高级查询(多条件;排序;筛选,或汇总后)结果集数据,是有保存价值(有再次使用的空间)。
⑵.三种导出EXCEL的方法:
EXCEL;1.Table(采用Select高级查询后的结果集)
2.TableEXCEL;控件(显示后)(采用Select高级查询后的结果集)
3.Table打印(后,再导出[CrystalReport9中文版])(采用Select高级查询后的结果集)EXCEL;
⑶.熟练掌握以下编程技术;
1.能够熟练地掌握用编程语言,书写数据库:
SQL语句(Select高级查询)的使用方法;
2.正确地使用MsFlexGrid、MsHFlexGrid、ListView控件,装入Select高级查询后的结果集方法。
3.正确设计水晶报表,解决输出Select高级查询后的结果。
⑷.用VB过程调用来解决导出EXCEL的方法。
二、实例:
请见图示1(由于篇幅所限,仅举图示1中的两种方法)
※.在模块中必须的”引用”
#.MicrosoftExcel11.0ObjectLibrary
#.MicrosoftActiveXDataObject2.6Library
以下两个实例均采用过程调用得以实现。
模块中的定义代码:
OptionExplicit
DimRS2AsNewADODB.Recordset '定义数据集对象
DimRS4AsNewADODB.Recordset '定义数据集对象
DimSsql1,Ssql2,Ssql3AsString 'Select高级查询字符串变量
DimMy_PathAsString '定义路径及文件名
DimDT1,DT2AsVariant '定义日期变量
DimQAsInteger '定义数据整型变量
具体步骤:
①.进入界面:
首先,选择(HireDate)租用日期,自从2001-01-03截至2003-08-27。
②.用鼠标点击【显示数据】按钮;符合条件的数据显示到网格中。
③.【显示数据】按钮下的代码:
PrivateSubCommand1_Click() '显示数据
DT1=Format(Trim(D1.Value),"yyyy-mm-dd")
DT2=Format(Trim(D2.Value),"yyyy-mm-dd")
Ssql1="":
Ssql2="":
Ssql3="" '1.全部。
2.表名。
3.条件。
Ssql1="Select*From"
Ssql2="Employees"
Ssql3="wherehiredate>='"&DT1&"'Andhiredate<='"&DT2&"'"
Ssql1=Ssql1&Ssql2&Ssql3
MSFlexGrid1_Click '运行Select高级查询将结果集装入网格控件;其过程…略。
Label1.Caption=""
Label1.ForeColor=QBColor(9)
Label1.Caption="目前运行表名:
"&Ssql1 '显示图示上Select高级查询字符串
Command3.Enabled=True ‘激活命令按钮
Command5.Enabled=True ‘激活命令按钮
EndSub
⑴. 将MsFlexGrid控件所显示的数据导出EXCEL
1.【[MSFlexGrid]导出至Excel】按钮下的过程代码:
PrivateSubCommand3_Click()'MSFlexGrid导出EXCEL/
My_Path=App.Path&"\"&Ssql2&"_G.xls"
PrintTableToExcel1Me.MSFlexGrid1,"表名:
"&Ssql2,"Select_高级查询:
"&Ssql1,My_Path,Me.ProgressBar1 '有参数过程调用
MsgBoxChr(13)+"数据已经导出到文件:
"+Chr(13)+Chr(13)+My_Path+"",vbInformation
Command3.Enabled=False
IfCommand5.Enabled=FalseAndCommand3.Enabled=FalseThen Clea_xy1'符合条件清空网格
EndSub
2.生成EXCEL文件的代码
PublicSubPrintTableToExcel1(ByRefmyGridAsMSFlexGrid,ByValstrHeaderAsString,ByValstrInfoAsString,ByValstrFileNameAsString,ByRefproBarAsProgressBar)
'参数:
网格、标题、Select_高级查询字符串、导出路径和文件名、进度条控件
OnErrorResumeNext
DimExcelAppAsExcel.Application '定义EXCEL变量
DimRAsLong,CAsLong '定义行、列变量
SetExcelApp=GetObject(,"Excel.Application")
IfmyGrid.Rows<=1ThenExitSub '导入文件执行的条件
IfErr.Number<>0Then
Err.Clear
SetExcelApp=CreateObject("Excel.application")
EndIf
DimwsBookAsWorkbook '定义EXCEL的BOOK变量
DimwsSheetAsWorksheet '定义EXCEL的SHEET变量
WithExcelApp.AutoCorrect.Application
.WindowState=xlMinimized
.SheetsInNewWorkbook=1
.Visible=False
.Workbooks.Add
SetwsBook=.ActiveWorkbook
SetwsSheet=.ActiveSheet
EndWith
'---进度
proBar.Min=0
proBar.Max=myGrid.Rows
proBar.Value=0
proBar.Visible=True
'---
WithwsSheet
.Cells.Font.Name="System"
.Cells.Font.Size=12
.Name="导出的表格"
Range(Cells(1,1),Cells(1,myGrid.Cols)).Select'第一行表名
Selection.HorizontalAlignment=xlCenter
Selection.VerticalAlignment=xlCenter
Selection.Merge '合并居中
.Cells(1,1)=strHeader
Range(Cells(2,1),Cells(2,myGrid.Cols)).Select '第二行Select查询字符串
Selection.HorizontalAlignment=xlCenter
Selection.VerticalAlignment=xlCenter
Selection.Merge '合并居中
.Cells(2,1)=strInfo
ForR=0TomyGrid.Rows-1
ForC=0TomyGrid.Cols-1
.Cells(R+3,C+1)=myGrid.TextMatrix(R,C)
Next
OnErrorResumeNext
'---进度
proBar.Value=R+1
'---
IfErr.Number<>0ThenErr.Clear
Next
'第三行开始存放MSFlexGrid控件的数据
Range(.Cells(3,1),.Cells(myGrid.Rows+2,myGrid.Cols)).Select
WithSelection.Borders(xlEdgeLeft)
.LineStyle=xlContinuous
.Weight=xlWide
.ColorIndex=xlAutomatic
EndWith
WithSelection.Borders(xlEdgeTop)
.LineStyle=xlContinuous
.Weight=xlWide
.ColorIndex=xlAutomatic
EndWith
WithSelection.Borders(xlEdgeBottom)
.LineStyle=xlContinuous
.Weight=xlWide
.ColorIndex=xlAutomatic
EndWith
WithSelection.Borders(xlEdgeRight)
.LineStyle=xlContinuous
.Weight=xlWide
.ColorIndex=xlAutomatic
EndWith
WithSelection.Borders(xlInsideVertical)
.LineStyle=xlContinuous
.Weight=xlThin
.ColorIndex=xlAutomatic
EndWith
WithSelection.Borders(xlInsideHorizontal)
.LineStyle=xlContinuous
.Weight=xlThin
.ColorIndex=xlAutomatic
EndWith
EndWith
'---进度
proBar.Visible=False
'---
ExcelApp.AutoCorrect.Application.DisplayAlerts=True
CallExcelApp.AutoCorrect.Application.ActiveWorkbook.SaveAs(strFileName)'路径及文件名
ExcelApp.Quit
EndSub
⑵.将Select高级查询的结果集导出EXCEL
1.【Select高级查询-->EXCEL】按钮下的过程代码:
PrivateSubCommand5_Click() 'Table导出EXCEL
#.注释:
过程调用参数:
1.Select高级查询字符串。
2.默认当前路径及文件名。
3.表的名称。
My_Path=App.Path&"\"&Ssql2&"_T.xls"
ExEcToExcelSsql1,My_Path,Ssql2 '有参数过程调用
MsgBoxChr(13)+"数据表已经导出到文件:
"+Chr(13)+Chr(13)+My_Path+"",vbInformation
Command5.Enabled=False
IfCommand3.Enabled=FalseAndCommand5.Enabled=FalseThenClea_xy1‘符合条件清空网格
EndSub
2.生成EXCEL文件的代码
PublicFunctionExEcToExcel(ByValStrOpenAsString,ByValstrFileNameAsString,ByValS_TabNameAsString)
'参数:
Select_高级查询字符串、导出文件路径及文件名、表名称
DimiRowCountAsInteger '记录总数变量
DimiColCountAsInteger '字段总数变量
DimxlAppAsNewExcel.Application '定义EXCEL变量
DimxlbookAsExcel.Workbook '定义EXCEL的BOOK变量
DimxlsheetAsExcel.Worksheet '定义EXCEL的SHEET变量
DimxlQueryAsExcel.QueryTable '定义EXCEL的查询变量
WithRS4 '执行数据集的操作
If.State=adStateOpenThen
.Close
EndIf
.ActiveConnection=Mydb'Cn
.CursorLocation=adUseClient
.CursorType=adOpenStatic
.LockType=adLockReadOnly
.Source=StrOpen
.Open
EndWith
WithRS4
If.RecordCount<1Then
MsgBox"没有可导出的记录!
",vbInformation+vbOKOnly,"提示":
ExitFunction
EndIf
'记录总数
iRowCount=.RecordCount
'字段总数
iColCount=.Fields.Count
EndWith
SetxlApp=CreateObject("Excel.Application")
Setxlbook=Nothing
Setxlsheet=Nothing
Setxlbook=xlApp.Workbooks().Add
Setxlsheet=xlbook.Worksheets("sheet1")'
xlApp.Visible=True
'
Withxlsheet
.Cells.Font.Name="宋体"'设置字体,加粗,字号
.Cells.Font.Bold=True
.Cells.Font.Size=12
.Name="导出Select查询结果集"
Range(Cells(1,1),Cells(1,iColCount)).Select
Selection.HorizontalAlignment=xlCenter
Selection.VerticalAlignment=xlCenter
Selection.Merge '合并居中
.Cells(1,1)="表名:
"&S_TabName '表名称
Range(Cells(2,1),Cells(2,iColCount)).Select'
Selection.HorizontalAlignment=xlCenter
Selection.VerticalAlignment=xlCenter
Selection.Merge '合并居中
.Cells(2,1)="Select高级查询:
"&StrOpen '查询字符串
EndWith
'添加查询语句,导入EXCEL数据
SetxlQuery=xlsheet.QueryTables.Add(RS4,xlsheet.Range("a3"))'从a3行开始
WithxlQuery
.FieldNames=True
.RowNumbers=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.RefreshOnFileOpen=False
.BackgroundQuery=True
.RefreshStyle=xlInsertDeleteCells
.SavePassword=True
.SaveData=True
.AdjustColumnWidth=True
.RefreshPeriod=0
.PreserveColumnInfo=True
EndWith
xlQuery.FieldNames=True '显示字段名
xlQuery.Refresh
Withxlsheet '设置表格的样式;从3行开始
.Range(.Cells(3,1),.Cells(iRowCount+3,iColCount)).Borders.LineStyle=xlContinuous
EndWith
xlApp.Application.Visible=True
'-将导出数据存放在默认的路径的文件夹中
xlApp.AutoCorrect.Application.DisplayAlerts=True
CallxlApp.AutoCorrect.Application.ActiveWorkbook.SaveAs(strFileName) '存盘的文件名称
xlApp.Quit
SetxlApp=Nothing '交还控制于Excel
Setxlbook=Nothing
Setxlsheet=Nothing
EndFunction
三、程序设计要点和“联系实际”问题:
1.程序设计要点
要熟练掌握编程中过程调用(重点为:
带参数)方法;熟知数据库,要熟练掌握SQL的基本语法;掌握EXCEL的一些使用编辑过程。
补充说明:
①.文中提到控件MsHFlexGrid、ListView的数据导出EXCEL,由于篇幅的问题,可向栏目责编索取。
②.Table打印(后,再导出[CrystalReport9中文版])(采用Select高级查询
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql server 导出报表的几种方法 导出 报表 方法