我们正在将旧的MS Access 2000数据库的ASP经典应用程序分阶段转换为更新的语言。我们刚刚完成了将所有Access数据迁移到SQL Server 2012数据库中。除了以下内容之外,大多数事情似乎都有效:rst.movefirst
。
失败的代码是某种特殊情况。 SQL语句所在的应用程序的这一部分以前总是在SQL Server上运行,尽管它在SQL Server数据库中查询的一些数据也通过SQL Server数据库中的访问链接服务器使用views
(因此SQL Server具有来自Access数据库的视图)。 SQL Server迁移所改变的唯一事实是这些使用的视图从链接访问服务器更改为常规SQL Server视图(现在位于同一服务器中)。
无论如何,这曾经是工作代码:
Set spSQL = Server.CreateObject("ADODB.Command")
Set spSQL.ActiveConnection=conSQL
strSQL = "SELECT [tblMMMemos].[EindDatum], [tblMMMemos].[Ontvanger], [tblMMMemos].[Name], [tblMMMemos].[Contact], [tblMMMemos].[Onderwerp], [vwOPSRelaties].[RelatieNaam] FROM [tblMMMemos] INNER JOIN [vwOPSRelaties] ON CONVERT (INT, Substring([tblMMMemos].[recode], 2, Len([tblMMMemos].[recode]))) = [vwOPSRelaties].[RelatieNummer] WHERE [tblMMMemos].[Status] <> ? ORDER BY (CASE WHEN [tblMMMemos].[Name] = ? THEN 1 ELSE 2 END), [tblMMMemos].[Einddatum]"
spSQL.commandtext= strSQL
spSQL.Parameters.Append spSQL.CreateParameter("@Status", adVarWChar,adParamInput,10)
spSQL.Parameters.Append spSQL.CreateParameter("@Name", adVarWChar,adParamInput,50)
spSQL.Parameters("@Status").Value = "Closed"
spSQL.Parameters("@Name").Value = "SYSTEM"
set rst=spSQL.execute(strSQL)
记录集处理如下:
Do While Not rst.EOF OR rst.BOF
'----Do something with the recordset-----
rst.movenext
loop
rst.MoveFirst
自从迁移到SQL Server以来,我收到错误:
第110行无法重新启动行集位置。
在rst.MoveFirst
所以我开始阅读并发现它可能是由于多个问题。 所以我开始在同一个问题的网上用一些答案调整代码。
首先,我尝试在查询中设置Nocount:
strSQL = "Set Nocount on "
strSQL = strSQL + "MyQuery"
strSQL = strSQL + " set nocount off"
这没有任何影响。其次我尝试修改我的记录集:
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conSQL
With cmd
.Commandtext = strSQL
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@Status", adVarWChar,adParamInput,10)
.Parameters.Append .CreateParameter("@Name", adVarWChar,adParamInput,50)
.Parameters("@Status").Value = "Closed"
.Parameters("@Name").Value = "SYSTEM"
End With
rst.Open cmd, conSQL, adOpenStatic, adLockBatchOptimistic
这也没有任何效果。
最后,我试图在没有如下存储过程的情况下这样做:
strSQL = "MyQuery above"
set rst=conSQL.execute(strSQL)
虽然这给了我错误:
<{1}} 上的第106行BOF或EOF为True,或者当前记录已被删除。请求的操作需要当前记录..
P.S。通过存储过程之前的子引用打开连接,如下所示:
MoveFirst
在此子系统中,正在打开连接:
OpenSQL conSQL
所以现在我不知道接下来要做什么。任何想法如何解决这一问题?
答案 0 :(得分:1)
如果您只能在记录集中向前移动,那么您可能正在打开仅向前记录集。光标设置会影响您可以遍历返回的记录集的方式。 有关详细信息,请参阅以下内容:
光标位置:https://msdn.microsoft.com/en-us/library/ms675802(v=vs.85).aspx
Recordset对象:https://msdn.microsoft.com/en-us/library/ms681510(v=vs.85).aspx