Excel VBa 连接Oracle数据库

本文介绍了如何使用Excel创建一个简单的数据库连接工具,包括连接数据库、查询表、更新数据等功能。通过VBA代码实现了ADODB连接Oracle数据库,展示查询结果,并提供了插入/修改数据的集成方法。用户界面包含连接、查询和更新按钮,操作直观易用。

需求:使用Excel做一个简单的数据库连接工具(类似于java中的AWT和SWING)。

  • 可以查询数据库的表
  • 查询各个表内的数据
  • 插入/修改各个表的数据

步骤:

  1. 先建立一个UserForm作为主界面,并放置按钮,如下图所示。
    在这里插入图片描述
    然后双击中间的“连接数据库”按钮,进行代码编辑。
Private Sub CommandButton1_Click()

    Dim strConn As String  
    Dim dbConn As Object
    Dim resSet As Object
    
    Dim db_sid, db_user, db_pass As String
    
    db_sid = "edu-server.yds.yd:1521/orcl.yds.yd"
    db_user = "root"
    db_pass = "123456"
    
    Set dbConn = CreateObject("ADODB.Connection")
    Set resSet = CreateObject("ADODB.Recordset")
    
    strConn = "Provider=OraOLEDB.Oracle.1; user id=" & db_user & "; password=" & db_pass & "; data source = " & db_sid & "; Persist Security Info=True"
    
    //清空sheet1   
    Sheets("Sheet1").Range("1:65536").ClearContents
 
    dbConn.Open strConn
    
    //查询当前数据库所有表名
    Set resSet = dbConn.Execute("select table_name from user_tables")
    
    //将表名放入sheet1中
    For j = 0 To resSet.Fields.Count - 1
      Cells(1, j + 1) = resSet.Fields(j).Name
    Next
    
    //将Sheet1中的A2:A20(A20写成了固定的,也可以写成变量)放到主界面中,下面是主界面
    UserForm2.ListBox1.RowSource = "Sheet1!A2:A20"
    
    Range("A2").CopyFromRecordset resSet
    
	//跳转到主界面
    UserForm2.Show 0
    //隐藏当前界面
    UserForm1.Hide
    
    dbConn.Close
    
End Sub

  1. 使用UserForm创建一个主界面,并放入一些控件,如下图。
    在这里插入图片描述
    左侧空白部分是一个ListBox,点击步骤1界面的“连接数据库”按钮后,跳转到当前步骤的界面,并将表明显示到左侧的ListBox中,效果图如下。
    在这里插入图片描述
    双击“查询”按钮,进入到查询功能编写。
Private Sub CommandButton1_Click()

    Dim strConn As String
    Dim strSql As String
    Dim iCount As Integer
    Dim whm As Worksheet
    
    Dim dbConn As Object
    Dim resSet As Object
    
    Dim db_sid, db_user, db_pass As String
    
    db_sid = "edu-server.yds.yd:1521/orcl.yds.yd"
    db_user = "root"
    db_pass = "123456"
    
    Set dbConn = CreateObject("ADODB.Connection")
    Set resSet = CreateObject("ADODB.Recordset")
    
    strConn = "Provider=OraOLEDB.Oracle.1; user id=" & db_user & "; password=" & db_pass & "; data source = " & db_sid & "; Persist Security Info=True"
	
	//根据鼠标选中的表名拼接sql
    strSql = "select * from " & ListBox1.Value
    
      //判断sheet2是否存在
      If ActiveSheet.Name = "Sheet2" Then
      	 //存在就清空sheet2
         Sheets("Sheet2").Range("1:65536").ClearContents
      Else
         //不存在就创建sheet2
         Worksheets.Add.Name = "Sheet2"
      End If
      
    dbConn.Open strConn
    
    //执行sql
    Set resSet = dbConn.Execute(strSql)
    
    //将查询到的数据放入sheet2中
    For j = 0 To resSet.Fields.Count - 1
      Cells(1, j + 1) = resSet.Fields(j).Name
    Next
    
    Range("A2").CopyFromRecordset resSet
    
    dbConn.Close

End Sub

效果图如下。
在这里插入图片描述

3.双击“更新”按钮,进入更新功能代码编写。
这里我的想法是将插入和修改放到了一起,点击“更新”按钮会后,先清空当前表
,再将sheet2中的数据全部插入到表中,这样就将插入和修改整合到了一起,但是效率可能会低.

Private Sub CommandButton2_Click()

    Dim strConn1 As String
    Dim truncateSql As String
    Dim insertSql As String
    
    Dim dbConn1 As Object
    Dim resSet1 As Object
    
    Dim maxRow As Integer
    Dim maxColumn As Integer
    
    Dim db_sid1, db_user1, db_pass1 As String
    
    db_sid1 = "edu-server.yds.yd:1521/orcl.yds.yd"
    db_user1 = "root"
    db_pass1 = "123456"
    
    Set dbConn1 = CreateObject("ADODB.Connection")
    Set resSet1 = CreateObject("ADODB.Recordset")
    
    //获取最大行数
    maxRow = ActiveSheet.[A65536].End(xlUp).Row
    //获取最大列数
    maxColumn = ActiveSheet.[IV1].End(xlToLeft).Column
    
    strConn1 = "Provider=OraOLEDB.Oracle.1; user id=" & db_user1 & "; password=" & db_pass1 & "; data source = " & db_sid1 & "; Persist Security Info=True"

	//拼接清空表sql
    truncateSql = "truncate table " & ListBox1.Value
    //拼接插入sql
    insertSql = "insert into " & ListBox1.Value & " values( "
       
    dbConn1.Open strConn1
    
    Set resSet1 = dbConn1.Execute(truncateSql)
    
    //循环,第一行是表字段名,从第二行开始,j=2
    For j = 2 To maxRow
    
    	//取每一行所有有效列的值,拼到插入语句的sql中
        For i = 1 To maxColumn
            If i = maxColumn Then
                insertSql = insertSql & "'" & Cells(j, i) & "')"
            Else
                insertSql = insertSql & "'" & Cells(j, i) & "',"
            End If
        Next
        
        //拼完插入语句的sql,就执行
        Set resSet1 = dbConn1.Execute(insertSql)

		//将sql重置成最初状态,以便下一行的拼接
        insertSql = "insert into " & ListBox1.Value & " values( "
    Next
    
    //增删改需要提交事务,这里我不清楚需不需要,写上肯定没错
    Set resSet1 = dbConn1.Execute("commit")
    
    //弹出提示框,提示更新成功!
    MsgBox prompt:="     更新成功!     "
    
    dbConn1.Close

End Sub

效果图如下。
在这里插入图片描述

  1. 最后一步,在sheet1的ThisWorkBook中写入显示步骤1的连接界面代码。

在这里插入图片描述

至此,简单数据库连接功能都已完成,有需要的可以添加,我这个每次执行sql都需要连接数据库,关闭连接,没有优化,可以自行修改。
第一次使用的话需要将sheet2删除!不删可能会报错。

例子放入在了百度网盘,有需要的自取。
链接: https://pan.baidu.com/s/1tCix95JM17FMttFO4sTGMg 提取码: adxf 复制这段内容后打开百度网盘手机App,操作更方便哦

感谢阅读!

Excel连接Oracle数据库可以通过以下步骤进行设置: 1. 打开Excel,点击菜单栏中的"数据"选项; 2. 在下拉菜单中选择"获取数据",然后选择"自其他源"; 3. 在弹出的菜单中选择"ODBC"选项,点击"确定"; 4. 在接下来的窗口中选择"Oracle"作为数据源; 5. 确认数据库Excel连接已配置完成,如果想要实现Oracle操作能在Excel界面实时更新,可以设置刷新连接属性; 6. 保存设置。 具体的步骤可以参考引用中的内容。同时,你也可以参考引用中提供的《readme_EXCEL连接oracle数据库取数_操作手册.docx》文件进行测试。 在设置之前,你需要检查一下相关软件的位数,确保ODBC、OracleExcel都是64位的。你可以按照引用中的步骤来检查软件位数。 最后,你还需要设置ODBC的DSN文件,具体步骤如下: 1. 以管理员身份打开ODBC; 2. 打开系统DSN,然后点击"添加系统数据源"; 3. 在弹出的窗口中选择Oracle,并点击"完成"; 4. 根据提示进行Oracle数据配置; 5. 配置完成后,点击"Test Connection"进行测试; 6. 如果连接成功,将显示"Connection successful",表示连接已成功。 如果出现连接失败的情况,可能是配置过程中输入的内容有误,请仔细检查。参考引用中的指导来填写正确的配置信息。 这样,你就可以在Excel中成功连接Oracle数据库了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Excel连接Oracle的正确实用方法,亲测有效!](https://blog.youkuaiyun.com/OK_GIRL/article/details/106490064)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [EXCEL连接oracle数据库取数.zip](https://download.youkuaiyun.com/download/yanhexiong198774/12238718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值