vb6 oracle9i 应用程序,逻辑错误记录集保持为空

Posted

技术标签:

【中文标题】vb6 oracle9i 应用程序,逻辑错误记录集保持为空【英文标题】:vb6 oracle9i application, logical error-recordset remains empty 【发布时间】:2012-09-13 18:25:40 【问题描述】:

目前我正在开展一个项目,该项目迫使我在我的应用程序中使用 Vb6 作为前端并使用 Oracle 9i 作为后端。我需要从 oracle 中的表中检索数据,并以 VB6 形式显示。我为此使用了一个记录集,但由于某种原因,即使相关表中存在有效记录,它也不包含任何记录。谁能告诉我怎么了?任何帮助,将不胜感激。我的代码如下-

Private Sub Command1_Click()
Dim sql As String
Set rs = New ADODB.Recordset
sql = "select test23.phoname from test23 where test23.ops='" + Text1.Text + "'"
rs.Open sql, con, adOpenStatic, adLockOptimistic
If rs.EOF = False Then
    Form7.Show
    Form7.Label2.Caption = rs.Fields("phoname")
End If
End Sub

if 语句从不执行,因为记录集总是看起来是空的。如果我删除 EOF 条件,我会收到运行时错误 3021。我的 sql 查询有问题吗?表 test23 已经存在于我的 oracle 数据库中,其属性为 serialno、phoname 和 ops。 谢谢- 罗恩

【问题讨论】:

我不太会用SQL,但是之前没见过用table.field语法。你确定它是有效的?你试过SELECT phoname FROM test23 WHERE ops='" + Text1.Text + "'"吗? 【参考方案1】:

几年前,我自己也曾为此苦苦挣扎。问题可能出在几个方面:特别是连接、Oracle 驱动程序、Oracle 主目录或查询本身。

我强烈建议您下载免费版本的 TOAD,这将允许您测试您的连接(我假设是某种 ODBC),然后您可以使用 TOAD 手动执行查询。

你有什么例外吗?

希望您可以由此更正您的代码/连接/查询。

祝你好运

【讨论】:

【参考方案2】:

我还要指出 adoOpenStatic 和 adoLockOptimistic 是互斥的属性值,因为乐观锁定仅适用于可更新的记录集,而静​​态记录集不可更新(在使用 adoLockBatchOptimistic 的批处理模式下除外)。这可能会以某种方式混淆 Oracle OLEDB 提供程序。

【讨论】:

以上是关于vb6 oracle9i 应用程序,逻辑错误记录集保持为空的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 VB6 使用 DAO.Relation?

Oracle9i:过滤器表达式无法在运行时排除数据

在VB6中通过DAO优化高延迟网络上的开放访问数据库

VB6 与 C# 以不同顺序返回的 SQL 结果集

在 vb.net 中使用 vb6 ocx 控件时无法加载文件或程序集“Interop.VBRUN”

尝试从数组创建 DAO 记录集