VBS确定SQL表中的记录数
Posted
技术标签:
【中文标题】VBS确定SQL表中的记录数【英文标题】:VBS determine number of records in SQL table 【发布时间】:2012-12-03 17:03:20 【问题描述】:如何确定 SQL 表中的记录数,然后将该值保存在变量中?
【问题讨论】:
这是我得到的最接近的:num_rows = "Select COUNT(*) FROM recepti_sol 请阅读faq 我的问题有什么问题? 如果你 1) 简要解释你的目标 2) 发布你尝试过的代码 3) 解释它做错了什么,包括任何错误,你可能会得到更好的回应和更少的反对票。否则,有些人会将其视为“给我 codez”请求——不管你是不是这个意思。 【参考方案1】:使用ADO访问数据库:
-
执行一个简单的
SELECT count(0) FROM myTable
查询。
访问结果集(如果不为空)并读取返回值。
未测试代码:
Dim conn, rs, recordsCount
recordsCount = -1
'initialize the connection
set conn = ...
'run the query and retrieve the results
set rs = conn.execute("SELECT count(0) as cnt FROM myTable")
if not rs.EOF then
recordsCount = cint(rs("cnt"))
end if
'cleanup
rs.close
conn.close
set rs = nothing
set conn = nothing
【讨论】:
"SELECT COUNT(*)" 返回一个 Long(或更好),向下转换为 Int 是危险的。 count(*) 是否总是返回 int64?它不取决于文件数据类型吗?真的,我很好奇。感谢您的评论。 显然返回类型取决于 DBMS、驱动程序和语言,但计数会是 Long 或更好;所以不要将其转换为有符号的 16 位整数 (CInt())。【参考方案2】:获取记录集大小/查询结果的三种方法:
Option Explicit
' simple way to get a connection
Dim oDb : Set oDb = CreateObject("ADODB.Connection")
oDb.Open "dsn=NWIND"
' execute & !obtain result! of "SELECT COUNT()" query
WScript.Echo "Select Count(*):", oDb.Execute("SELECT COUNT(*) FROM Products").Fields(0).Value
' trying to use recordcount (fails, because non-static rs)
WScript.Echo "RecordCount (A):", oDb.Execute("SELECT * FROM Products").RecordCount
' use recordcount with static rs
Const adOpenStatic = 3
Dim oRs : Set oRS = CreateObject("ADODB.Recordset")
oRS.Open "SELECT * FROM Products", oDb, adOpenStatic
WScript.Echo "RecordCount (B):", oRs.RecordCount
' get rows from query and use UBound()
Dim aData : aData = oDb.Execute("SELECT * FROM Products").GetRows()
WScript.Echo "GetRows():", UBound(aData, 2) + 1
oDb.Close
输出:
cscript 04.vbs
Select Count(*): 77
RecordCount (A): -1
RecordCount (B): 77
GetRows(): 77
使用Docs 了解有关这些策略的更多信息。
【讨论】:
如果您只想要计数而不需要其他任何东西,那么除了“从表中选择计数(0)”之外的所有内容似乎都是浪费。无需获取您不想使用的数据。以上是关于VBS确定SQL表中的记录数的主要内容,如果未能解决你的问题,请参考以下文章