vb源码:
Public Function GetSchoolDepartmentListBysWhere(PageSize, PageNo, PageCount, sWhere, arrList) As Boolean
  'On Error Resume Next  Dim objCmd As New ADODB.Command
  Dim objRs As New ADODB.Recordset
 
  
  objCmd.ActiveConnection = objConn '数据库连结字符串
  objCmd.CommandText = "op_GetSchoolDepartmentListBysWhere"
  objCmd.CommandType = adCmdStoredProc
  
  objCmd.Parameters.Append objCmd.CreateParameter("@PageCount", adInteger, adParamReturnValue)
  objCmd.Parameters.Append objCmd.CreateParameter("@sWhereField", adVarChar, adParamInput, 3000, sWhere)
  objCmd.Parameters.Append objCmd.CreateParameter("@PageNo", adInteger, adParamInput, , CInt(PageNo))
  objCmd.Parameters.Append objCmd.CreateParameter("@PageSize", adInteger, adParamInput, , CInt(PageSize))
  
  Set objRs = objCmd.Execute()
  
  If Not objRs.EOF Then
     arrList = objRs.GetRows()
     GetSchoolDepartmentListBysWhere = True
  Else
     GetSchoolDepartmentListBysWhere = False
  End If  objRs.Close
  Set objRs = Nothing  PageCount = objCmd.Parameters("@PageCount").Value
 
  Set objCmd = Nothing  If Err.Number <> 0 Then
     GetSchoolDepartmentListBysWhere = False
  End If
End Function存储过程
CREATE PROCEDURE [dbo].[op_GetSchoolDepartmentListBysWhere]
@sWhereField varchar(3000),
@PageNo   int,
@PageSize int
AS
  /*定义局部变量*/
  DECLARE @BeginID  varchar(6)
  DECLARE @EndID varchar(6)
  DECLARE @RecordCount int
  DECLARE @PageCount int
  DECLARE @RowCount int
  DECLARE @Sqlstr varchar(3000)  create table #temp(  
    KSH varchar(6) NOT NULL, 
    KSMC varchar(60)  NOT NULL, 
    fatherKSH varchar(6)  NOT NULL 
   )
   set @sqlstr='select KSH,KSMC,FatherKSH from SchoolDepartment '
   set @Sqlstr=@sqlstr+ ' order by KSH' 
   set @sqlstr='insert into #temp (KSH,KSMC,FatherKSH)  '+@sqlstr
   execute(@sqlstr)
 
   /*关闭计数*/
   SET NOCOUNT ON
   
   /*求纪录总数*/
   SELECT @RecordCount = COUNT(*) FROM #temp
   IF (@RecordCount = 0)    --如果没有纪录,则返回零
      RETURN 0   /*取得总页数*/
   SET @PageCount = @RecordCount / @PageSize
   IF @PageCount * @PageSize < @RecordCount
     SET @PageCount = @PageCount + 1   /*判断页数是否正确*/
   IF (@PageNo - 1) * @PageSize > @RecordCount
     RETURN (-1)   /*求开始rootID*/
   SET @RowCount = (@PageNo - 1) * @PageSize + 1
   /*限制条数*/
   SET ROWCOUNT @RowCount
   SELECT @BeginID = KSH FROM #temp order by KSH desc   /*结束rootID*/
   SET @RowCount = @PageNo * @PageSize
   /*限制条数*/
   SET ROWCOUNT @RowCount
   SELECT @EndID = KSH FROM #temp  order by KSH desc
   /*恢复系统变量*/
   SET ROWCOUNT 0
   SET NOCOUNT OFF   SELECT S.*  FROM  SchoolDepartment S,#temp T  WHERE  T.KSH=S.KSH  order by S.KSH --  RETURN(@PageCount)
GO
运行时老是提示“对象关闭时,不允许操作”等错误,希望高手帮小弟一把,多谢!

解决方案 »

  1.   


      
     //运行时老是提示“对象关闭时,不允许操作”等错误,希望高手帮小弟一把,多谢! 是因为你打开了数据库没有进行关闭吧!在存储过程最前面先关闭数据例:Set DataEzsb1 = Nothing
      

  2.   

    执行哪一句时出错呢?估计是由于objcnn没有打开的原因,请检查是否已经建立了数据库连接
      

  3.   

    我怀疑是存储过程中使用临时表的原因,如果存储过程如下这样的话,就没有什么问题
    CREATE PROCEDURE [dbo].[op_GetSchoolDepartmentListBysWhere]
    @sWhereField varchar(3000),
    @PageNo   int,
    @PageSize int
    AS
        
    SELECT S.*  FROM  SchoolDepartment SGO
    还是请各位帮忙了,谢谢
      

  4.   

    容易解决,参……………………………………DING
      

  5.   

    请参考这里:发布一个通用的数据分页的存储过程。
    http://community.csdn.net/Expert/TopicView1.asp?id=3587201