上下文:SQL Server 2012,ADODB 2.8,VB6
我有一个用VB6编写的COM DLL。 (好吧,这本身就是一个问题,但这不是我现在所说的。)
通过SSMS执行的某些声明工作正常。通过ADODB执行时,它们会失败。示例如下:
UPDATE tblEvents SET EventStartDateTime = EventStartDateTime + CAST('-604800000' AS bigint), EventEndDateTime = EventEndDateTime + CAST('-604800000' AS bigint) WHERE (EventID = 41)
UPDATE tblEvents SET EventStartDateTime = 1400947200000 WHERE (EventID = 41)
UPDATE tblEvents SET EventStartDateTime = CAST(1399132800000 as bigint) WHERE (EventID = 41)
UPDATE tblEvents SET EventStartDateTime = (1400256000000) WHERE (EventID = 41)
我从ADODB得到的错误是
ADODB.Connection: Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
实现ADODB调用的代码如下:
Function OpenRecordSet2(ByRef oDb As Variant, sQuery As Variant) As Object ''ADODB.Connection ADODB.Recordset
Dim oRecordSet As Object 'ADODB.Recordset
Set oRecordSet = CreateObject("ADODB.RecordSet")
oRecordSet.Open sQuery, oDb, adOpenForwardOnly, adLockOptimistic
Set OpenRecordSet2 = oRecordSet
End Function
Function OpenDatabase2(theConnection As Variant) As Object ' ADODB.Connection
Dim oConnection As Object 'ADODB.Connection
On Error Resume Next
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open theConnection
If Err.Number <> 0 Then
Err.Raise OPENDATABASE_E_NOTFOUND, , Err.Description
End If
Err.Clear
On Error GoTo 0
Set OpenDatabase2 = oConnection
End Function
使用后期绑定,即CreateObject语句。
连接或记录集的设置是否不同?这就是我现在所能想到的(上午4:24)。
10小时之后
嗯,原来有两件事。一个是“。”当我应该使用“,”; JScript没有抱怨的一次是你用两个参数编写一个函数,但你只发一个参数。
另一个问题是我使用了错误的CursorType property。一旦我将其设置为adOpenDynamic,我就能够更新数据。