在excel中执行Sql语句,实现复杂查询

编程知识 更新时间:2023-04-05 02:31:38

引子

Excel过滤与查找数据的功能很强,但如果是非常复杂的查询还是用SQL语句来得直接。但这需要有一些数据库的专业知识。

实事上excel支持对Sheet上的数据进行sql查询,这时Sheet名就是要查询的数据表的名字,只不过要加上中括号。

为了方便用sql语句直接操作sheet上的数据,特地用VBA写了一个小程序。

实例操作

程序的文件结构如下:

execlSQL.xls是主程序所在的excel文件,testData.xls是存放测试数据的excel文件。
打开execlSQL.xls,效果如下图所示:

点击左上方的“打开数据源”按钮,选择要做为数据源的excel文件,这里选择包含测试数据的testData.xls.
然后点击右下方的“执行查询“按钮,就可以看到查询的结果,如下图所示:

如果想修改查询所用的sql语句,直接在文本框中修改sql语句即可。

工作原理

在“打开数据源时” 通过如下语句建立了数据源

Set cnn = CreateObject("adodb.connection")          '创建数据库连接cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & srcFileName

在“执行查询”时,通过adodb的connection对象执行了sql查询

 Set rs = CreateObject("adodb.recordset")            '创建一个数据集
 SQL = Trim(txtSql.Text)
 Set rs = cnn.Execute(SQL)                           '执行查询

VBA代码


Option Explicit

Private cnn, rs, SQL$
Private srcFileName As String


'打开数据源xls文档
Private Sub cmdOpen_Click()

    Dim strFileName As Variant
    If getOpenFiles(strFileName) = True Then
        srcFileName = strFileName
    Else
        srcFileName = ""
    End If
    
End Sub


'执行查询
Private Sub cmdExec_Click()

    If srcFileName = "" Then
        MsgBox "没有打开数据源"
        Exit Sub
    End If

    On Error GoTo errHandle
    
    Set cnn = CreateObject("adodb.connection")          '创建数据库连接
    cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & srcFileName

    Set rs = CreateObject("adodb.recordset")            '创建一个数据集
    SQL = Trim(txtSql.Text)
    Set rs = cnn.Execute(SQL)                           '执行查询
    
    Sheet2.Cells.ClearContents
    
    Dim i As Integer
    For i = 1 To rs.Fields.Count
        Sheet2.Cells(1, i) = rs.Fields(i - 1).Name
    Next
    Sheet2.Range("a2").CopyFromRecordset rs
    
    cnn.Close
    Set cnn = Nothing
    
    Sheet2.Activate
    
    Exit Sub
errHandle:
    MsgBox Err.Description
    
End Sub


'取得打开的文件名,如果没有打开文件则返回false
Private Function getOpenFiles(strFileName As Variant) As Boolean

    Dim workPath
    workPath = ThisWorkbook.Path
    ChDrive Split(workPath, ":")(0)
    ChDir workPath
    
    Dim FileNames As Variant
    
    FileNames = Application.GetOpenFilename("Excel文件 (*.xls),*.xls", , "选择要执行查询的源文件", , False)
  
    'VarType(varname) 返回一个 Integer,指出变量的子类型 ,TypeName 返回类型名称
   
    If TypeName(FileNames) = "Boolean" Then
       getOpenFiles = False
    Else
        strFileName = FileNames
        getOpenFiles = True
    End If
    
End Function

完整程序下载

可以直接执行的完整程序请到CSDN资源中下载

更多推荐

在excel中执行Sql语句,实现复杂查询

本文发布于:2023-04-05 02:31:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/f0f7ac47c16d254b396add38ded176c8.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   excel   Sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 44375文章数
  • 14阅读数
  • 0评论数