首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用VBA和SQL COUNT(*)检查Oracle数据库中的表是否为空

使用VBA和SQL COUNT(*)检查Oracle数据库中的表是否为空
EN

Stack Overflow用户
提问于 2022-11-16 10:39:14
回答 1查看 19关注 0票数 0

我需要了解如何在Oracle11g数据库中查找给定表是否为空表,以便在PowerAdmin服务器监视器的“运行脚本”特性中使用VBA进行具体操作。

SELECT COUNT(*) FROM table;正确地将"COUNT(*)“返回为0。结果img我需要找到一种方法来检查结果是否为0。

这是脚本同事用于访问数据库的一个经过编辑的版本,用于稍微不同的目的,我更希望我们可以继续这样做。

代码语言:javascript
运行
复制
Dim strConnect
Dim strSQL
Dim adoConnection
Dim adoRecordset

strConnect = "Driver={Oracle in OraClient11g_home1_32bit};" & _
           "Dbq=database;" & _
           "Uid=user;" & _
           "Pwd=password"

strSQL = "SELECT COUNT(*) FROM table;;"

Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Open strConnect

Set adoRecordset = CreateObject("ADODB.Recordset")
adoRecordset.ActiveConnection = adoConnection
adoRecordset.Source = strSQL
adoRecordset.Open

[check if query result is the number 0 here]

adoRecordset.Close   
adoConnection.Close

我需要像这样的东西

代码语言:javascript
运行
复制
If queryresult = 0 then
  SendNotification = True
  Details = "table is empty"
End If

任何帮助都将不胜感激。ELI5越多越好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-16 11:16:37

在ADO中执行查询之后,记录集指向第一个记录,并且可以访问每个索引(基于0)的第一个记录的字段。

count(*)-query的结果始终是一行,只有一列,保存记录的数量。因此,您可以使用adoRecordset(0) (=第一个记录的第一个字段)访问行数。

您可以创建一个函数来获取记录的数量:

代码语言:javascript
运行
复制
Const strConnect = "..."

Function CountValues(tableName As String) As Long
    Dim strSQL As String
    strSQL = "SELECT COUNT(*) FROM " & tableName

    Dim adoConnection
    Dim adoRecordset
    
    On Error GoTo CountValues_ERROR
    Set adoConnection = CreateObject("ADODB.Connection")
    Set adoRecordset = CreateObject("ADODB.Recordset")
    
    adoConnection.Open strConnect
    adoRecordset.ActiveConnection = adoConnection
    adoRecordset.Source = strSQL
    adoRecordset.Open
    Dim res
    res = adoRecordset(0)
    CountValues = CLng(res)
    GoTo CountValues_EXIT
    
CountValues_ERROR:
    MsgBox "An error occurred fetching data: " & Err.Number & " " & Err.Description

CountValues_EXIT:
    
    If adoRecordset.State <> 0 Then adoRecordset.Close
    If adoConnection.State <> 0 Then adoConnection.Close
End Function

注:如果我在你的地方,我会改用早期装订。添加对ADODB库的引用并使用

代码语言:javascript
运行
复制
    Dim adoConnection As ADODB.Connection
    Dim adoRecordset As ADODB.RecordSet
    
    Set adoConnection = new ADODB.Connection 
    Set adoRecordset = new ADODB.RecordSet
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74459015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档