前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA与数据库——写个类操作ADO_执行SQL

VBA与数据库——写个类操作ADO_执行SQL

作者头像
xyj
发布2022-04-26 21:03:01
5660
发布2022-04-26 21:03:01
举报
文章被收录于专栏:VBA 学习VBA 学习
执行SQL:虽然读取和写入都有了,但是经常还是会碰上需要执行一些特殊的sql语句的情况,前面DB信息功能里的保存sql语句也是为了方便执行一些常用的sql语句。

执行cbInput的SQL:

代码语言:javascript
复制

'执行指定sql语句
Sub rbbtnExcsql(control As IRibbonControl)
    Dim ret As Long
    
    If VBA.Len(DB_Info.Path) Then
        If VBA.Len(MPublic.scbInput) Then
            ExecSQL MPublic.scbInput
        Else
            MsgBox "请在rbcbInput设置sql语句", vbInformation
        End If
    Else
        MsgBox "请选择DB"
    End If
End Sub

执行活动单元格的SQL:

代码语言:javascript
复制
Sub rbbtnExcActivecellSql(control As IRibbonControl)
    If VBA.Len(DB_Info.Path) Then
        If VBA.Len(ActiveCell.Value) Then
            If ExecSQL(ActiveCell.Value) = SuccRT Then MsgBox "OK"
        Else
            MsgBox "请在活动单元格输入sql语句", vbInformation
        End If
    Else
        MsgBox "请选择DB"
    End If
End Sub

执行多个单元格SQL(事务):

代码语言:javascript
复制
Sub rbbtnExcCellsSql(control As IRibbonControl)
    If VBA.Len(DB_Info.Path) Then
        If VBA.TypeName(Selection) = "Range" Then
            Dim arr() As Variant
            Dim v As Variant
            arr = Selection.Value
            
            If DB_Info.db.Begin Then
                MsgBox DB_Info.db.GetErr
                Exit Sub
            End If
            
            For Each v In arr
                If ExecSQL(VBA.CStr(v)) = ErrRT Then
                    DB_Info.db.Rollback
                    Exit Sub
                End If
            Next
            DB_Info.db.Commit
            
            MsgBox "OK"
        Else
            MsgBox "请选择单元格", vbInformation
        End If
    Else
        MsgBox "请选择DB"
    End If
End Sub

执行sql语句的功能,主要是判断一些是需要返回数据的还是不需要返回数据的:

代码语言:javascript
复制
Private Function ExecSQL(strsql As String) As RetCode
    Dim ret As Long
    Select Case VBA.LCase$(VBA.Left$(strsql, 6))
    Case "select", "pragma"
        ret = DB_Info.db.ExecuteToExcel(strsql, Range("A1"))
    Case Else
        ret = DB_Info.db.ExecuteNonQuery(strsql)
    End Select
    
    If ret Then
        MsgBox DB_Info.db.GetErr()
        ExecSQL = ErrRT
    End If
End Function

AllData:这个其实应该放到读取中!就是把数据库的所有表的数据都读取出来:

代码语言:javascript
复制
Sub rbbtnAllTableAllData(control As IRibbonControl)
    Dim i As Long
    
    If VBA.Len(DB_Info.Path) Then
        If DB_Info.TablesCount = 0 Then
            MsgBox "请选点击[读取表名]。"
            Exit Sub
        End If
        
        For i = 0 To DB_Info.TablesCount - 1
            Worksheets.Add(After:=Worksheets(Worksheets.Count)).name = DB_Info.Tables(i).SName
            
            If DB_Info.db.ExecuteToExcel("select * from " & DB_Info.Tables(i).SName, Range("A1")) Then
                MsgBox DB_Info.db.GetErr()
                Exit Sub
            End If
        Next
    Else
        MsgBox "请选择DB"
    End If
End Sub
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档