VB6:what';这个tsql过程调用有什么问题?

VB6:what';这个tsql过程调用有什么问题?,vb6,ado,Vb6,Ado,我在VB6中有以下过程调用: dim rs as adodb.command dim cnn as adodb.connection with rs set .activeconnection = cnn .CommandType = adCmdStoredProc .CommandText = "sp_qryUpdate" .CommandTimeout = 0 .Parameters("@uidbatch").value = lngBat

我在VB6中有以下过程调用:

dim rs as adodb.command 
dim cnn as adodb.connection 

with rs
    set .activeconnection = cnn 
    .CommandType = adCmdStoredProc 
    .CommandText = "sp_qryUpdate" 
    .CommandTimeout = 0 
    .Parameters("@uidbatch").value = lngBatchID 
    .Execute , , adExecuteNoRecords 
end with 
我收到的错误是

对象变量或未设置块变量

设置
.activeconnection
后会引发错误


你知道这意味着什么吗?我收到的连接字符串是正确的。

奇怪,
rs
通常用于指示记录集,而不是命令,但我想它们各自都有自己的记录集

我看到了一些潜在的问题。我不完全确定其中的区别,因为我接触VB6的时间很短,但我所掌握的所有代码:

dim rs as new adodb.recordset
在其中(即,使用
new
关键字)。这可能会引起问题

我还假设在第二个
dim
之间有一些代码,是吗

因为否则,您实际上并没有打开连接以供使用


有一些教程代码可能会有所帮助。我会说“享受!”但我不认为这是一个选项:-)

在使用它之前,必须创建
adodb.command
adodb.connection
的实例

试试这个

dim rs as New adodb.command 
dim cnn as New adodb.connection 

正如其他人所说,您需要创建rs和cnn,但还需要向参数集合添加一个新参数

.Parameters("@uidbatch").value

这假设它已经存在。

您可以进行所有手动参数定义,但只使用rs.Parameters.Refresh要容易得多。这将自动正确填充参数集合


此外,虽然必须实例化对象变量是正确的,但不建议在同一行上进行实例化。与.Net中不同,这实际上并没有实例化变量。相反,每次引用变量时,运行时都会检查实例是否存在,如果不存在,则创建一个实例。这会产生不必要的开销。最佳做法是在新行中使用Set关键字。

这是我忘记的。。“新”和.open语句。现在它停在.Parameters(“@uidbatch”).value=lngBatchID,错误是:在与请求的名称或序号“any ideas”对应的集合中找不到项?您是说我需要添加.Parameters.Append.createparameter(@uidbatch”,adinteger,adparainput,lngBatchID)是的,我想是的。我已经好几年没做vb了,但它看起来很不错。