我收到错误 - ADODB.Recordset:关闭对象时不允许操作。当使用多表sql语句时。
其他sql语句(简单的)我没有收到和错误,我已经将sql语句复制到查询中以验证它在MSSQL中从打印出的sql变量中正常工作 - 它确实返回值。
方法
PriorMonthSales =CALCULATE(
SUM(Table[Sales]),
FILTER(
Table[TeamID]&&
Table[Date] - 1
)
PriorQuarterSales =CALCULATE(
SUM(Table[Sales]),
FILTER(
Table[TeamID]&&
Table[Date] - 3
)
PriorSales = IF(Table[PaymentType] = "Monthly",PriorMonthSales, PriorQuarterSales)
由于 --------第二次尝试sql是相同的
sql = "SET NOCOUNT ON;SET ANSI_WARNINGS OFF;use dbcheck; " &_
"select year([00080020]) as YEAR, month([00080020]) as MONTH,sum(bytesize/1024/1024/1024) as GBStored, count(distinct [0020000d]) " &_
" as FinalCount from tblt t, tbls s, tblf f where" &_
" id1 = _id1 and id2 = _id2file" &_
" and [00080020] is not null" &_
" group by year([00080020]), month([00080020]) order by year([00080020]) desc, month([00080020]) desc"
Dim cndb : Set cndb = CreateObject("ADODB.Connection")
Dim rsdb: Set rsdb = CreateObject("ADODB.Recordset")
cndb.Provider = "sqloledb"
cndb.Properties("Data Source").Value = "127.0.0.1"
cndb.Properties("Initial Catalog").Value = "master"
cndb.Properties("Integrated Security").Value = "SSPI"
cndb.CursorLocation = 3
cndb.Open
set rsdb = CreateObject ("ADODB.Recordset")
cmd.ActiveConnection = cndb
cmd.CommandType = 1
cmd.CommandText = sql
rsdb.CursorLocation = 3
rsdb.CursorType = 3
rsdb.LockType = 3
Set rsdb = cmd.Execute
IF Not (rsdb IS Nothing) Then
rsdb.MoveFirst ** ERRORS OUT HERE
答案 0 :(得分:1)
我认为您正在接收空记录集。
Set rsdb = cmd.Execute
If Not (rsdb IS Nothing) Then
rsdb.MoveFirst ** ERRORS OUT HERE
如果rsdb.EOF
返回True
,则无法移至第一条记录。试试这个:
Set rsdb = cmd.Execute
If Not (rsdb Is Nothing) Then
If Not rsdb.EOF Then
rsdb.MoveFirst
...
End If
End If
然后诊断您的查询,看看实际是否返回任何内容。这可能会有所帮助:
Echo sql
也就是说,您将记录集的引用设置为3次,并且每次都丢弃先前的引用。
Dim rsdb: Set rsdb = CreateObject("ADODB.Recordset")
Set
声明是多余的,因为......
cndb.Open
set rsdb = CreateObject ("ADODB.Recordset")
您在这里重新设置它。但是Set
语句也是多余的,因为......
Set rsdb = cmd.Execute
这是实际需要发生的唯一参考分配。您正在设置的CursorLocation
和其他属性将与丢弃的引用一起丢弃。也删除它们。
答案 1 :(得分:1)
我发现了我的问题 - 在我所拥有的SQL语句中 使用dbcheck 尝试使用在SQL QUERY ANALYZER中使用的use语句选择它 - 只是不在脚本中,我将初始目录更改为dbcheck并从sql中删除了“use”并且它有效。
感谢大家的帮助。