sql server 导出报表的几种方法.docx

上传人:b****5 文档编号:6488010 上传时间:2023-01-07 格式:DOCX 页数:8 大小:114.50KB
下载 相关 举报
sql server 导出报表的几种方法.docx_第1页
第1页 / 共8页
sql server 导出报表的几种方法.docx_第2页
第2页 / 共8页
sql server 导出报表的几种方法.docx_第3页
第3页 / 共8页
sql server 导出报表的几种方法.docx_第4页
第4页 / 共8页
sql server 导出报表的几种方法.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

sql server 导出报表的几种方法.docx

《sql server 导出报表的几种方法.docx》由会员分享,可在线阅读,更多相关《sql server 导出报表的几种方法.docx(8页珍藏版)》请在冰豆网上搜索。

sql server 导出报表的几种方法.docx

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高级查询

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1