Delphi调用SQL分页存储过程实例 (-- ::)转载▼
标签: it 分类: Delphi相关
//-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存储过程开始创建----------------------------------------------------------------------------------------------------------- IF EXISTS (SELECT name FROM sysobjects WHERE name = 'PageShowOne' AND type = 'P') DROP PROCEDURE PageShowOne GO CREATE Proc PageShowOne @PageSize int= ,--每页显示的记录数 @PageCurrent int= ,--当前要显示的页号 @FdName varchar()='' ,--主键名或者标识列名 @SelectStr varchar()='', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。 @FromStr varchar()='', --from子句,不包含from关键子,如:myTable或者myTable,yourTable @WhereStr varchar()='', --Where子句,不包含where关键字,如空的,或者 id> 等 @OrderByStr varchar()='',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等 @CountRows int= output, --返回记录总数 @CountPage int= output --返回总页数 as --------定义局部变量--------- declare @Id1 varchar(),@Id2 varchar() --开始和结束的记录号 declare @OrderBySqls varchar() --order by 子句 declare @WhereSqls varchar() --where 子句 declare @Sqls nvarchar() --最终组合成的Sqls语句 declare @TmpStr varchar() --临时 ---------------------------- if @OrderByStr <> '' set @OrderBySqls = ' order by '+@OrderByStr else set @OrderBySqls = '' -------- if @WhereStr <> '' set @WhereSqls = ' where ('+@WhereStr+')' else set @WhereSqls = '' -------- set @TmpStr = @WhereSqls --如果显示第一页,可以直接用top来完成 if @PageCurrent<= begin select @Id1=cast(@PageSize as varchar()) exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls) goto LabelRes end --------------------------- select @Id1=cast(@PageSize as varchar()) ,@Id2=cast((@PageCurrent-)*@PageSize as varchar()) ---------- if @WhereSqls <> '' set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))' else set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')' ---------- set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls exec (@Sqls) ----------- LabelRes: -----返回总记录数 set @Sqls = 'select @a=count(1) from '+@FromStr+@TmpStr exec sp_executesql @sqls,N'@a int output',@CountRows output -----返回总页数 if @CountRows <= @PageSize set @CountPage = else begin set @CountPage = @CountRows/@PageSize if (@CountRows%@PageSize) > set @CountPage = @CountPage + end return GO //----分页存储过程结束--------------------------------------------------------------------------------------- //----Delphi7调用过程开始---------------------------------------------------------------------------------------- 首先在 public 中定义 i, RsCount: integer; 在frmMain中放置一个dbgrid , datasource, AdoStoredProc [name->sp], 和4个 Button, 设置好相关连接! procedure TfrmMain.btnFirstClick(Sender: TObject); begin i := ; sp.ProcedureName := 'PageShowOne;1'; sp.Close; sp.Parameters.ParamByName('@PageSize').Value := ; sp.Parameters.ParamByName('@PageCurrent').Value := i; sp.Parameters.ParamByName('@FdName').Value := '图纸编号'; sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数'; sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi'; sp.Parameters.ParamByName('@WhereStr').Value := ''; sp.Parameters.ParamByName('@OrderByStr').Value := '日期'; sp.Open; Label1.Caption := '记录总数:'+IntToStr(sp.Parameters.ParamValues['@CountRows']); Label2.Caption := '总页数:'+IntToStr(sp.Parameters.ParamValues['@CountPage']); RsCount := sp.Parameters.ParamValues['@CountPage']; Label3.Caption := '第 '+IntToStr(i)+ ' 页'; end; procedure TfrmMain.btnNextClick(Sender: TObject); begin if i >= RsCount then ShowMessage('已经是最后一页!') else i := i + ; sp.ProcedureName := 'PageShowOne;1'; sp.Close; sp.Parameters.ParamByName('@PageSize').Value := ; sp.Parameters.ParamByName('@PageCurrent').Value := i; sp.Parameters.ParamByName('@FdName').Value := '图纸编号'; sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数'; sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi'; sp.Parameters.ParamByName('@WhereStr').Value := ''; sp.Parameters.ParamByName('@OrderByStr').Value := '日期'; sp.Open; Label3.Caption := '第 '+IntToStr(i)+ ' 页'; end; procedure TfrmMain.btnPriorClick(Sender: TObject); begin if i > then i := i - else ShowMessage('已经是第一页了!'); sp.ProcedureName := 'PageShowOne;1'; sp.Close; sp.Parameters.ParamByName('@PageSize').Value := ; sp.Parameters.ParamByName('@PageCurrent').Value := i; sp.Parameters.ParamByName('@FdName').Value := '图纸编号'; sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数'; sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi'; sp.Parameters.ParamByName('@WhereStr').Value := ''; sp.Parameters.ParamByName('@OrderByStr').Value := '日期'; sp.Open; Label3.Caption := '第 '+IntToStr(i)+ ' 页'; end; procedure TfrmMain.btnLastClick(Sender: TObject); begin i := RsCount; sp.ProcedureName := 'PageShowOne;1'; sp.Close; sp.Parameters.ParamByName('@PageSize').Value := ; sp.Parameters.ParamByName('@PageCurrent').Value := i; sp.Parameters.ParamByName('@FdName').Value := '图纸编号'; sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数'; sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi'; sp.Parameters.ParamByName('@WhereStr').Value := ''; sp.Parameters.ParamByName('@OrderByStr').Value := '日期'; sp.Open; Label3.Caption := '第 '+IntToStr(i)+ ' 页'; end; //--------------调用结束-------------------------------------------------------------------------------------------------------------------

Delphi调用SQL分页存储过程实例的更多相关文章

  1. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  2. 完整SQL分页存储过程(支持多表联接)

    http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...

  3. Yii2.0调用sql server存储过程并获取返回值

    1.首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE P ...

  4. java 调用 sql server存储过程

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  5. 真正通用的SQL分页存储过程

    关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...

  6. 关于SQL分页存储过程的分析

    建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...

  7. VS中调用SQL SERVER存储过程

     存储过程是经过编译的,永久保存在数据中的一组SQL语句,通过创建和使用存储过程能够提高程序的重用性和扩展性,为程序提供模块化的功能,还有利于对程序的维护和管理.以下就详谈一下,VB.NET怎样调 ...

  8. VB.NET调用SQL Sever存储过程

    概要: 本文介绍VB.NET使用创建并调用带有输入参数和输出参数的SQL Sever存储过程 本文代码首先检查要创建的存储过程再数据库中是否存在在.如果不存在,则代码创建一个存储过程,该过程一个参数来 ...

  9. SQL - 分页存储过程

    http://www.jb51.net/article/71193.htm http://www.webdiyer.com/utils/spgenerator/ create PROCEDURE [d ...

随机推荐

  1. 安装grid时找不到ASM共享磁盘

    1.安装ORACLE数据库集群软件grid时找不到共享磁盘,如下图: 2.网上找过有各种说法,但此处小编的解决方案是:通过重新安装软件:oracleasmlib-2.0.4-1.el6.x86_64. ...

  2. Centos nginx安装

    1.下载nginx http://nginx.org/en/download.html 2.上传到服务器上,并解压: rz 后选择上传的文件 tar -zxvf /fish/download/ngin ...

  3. leetcode105

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  4. 1.Ansible安装以及配置

    本节内容以Centos7为系统环境进行讲解: 1.安装epel源,方便直接yum安装: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun ...

  5. Access restriction 问题解决

    最近导入新项目,导入所有用到的jar包,发现其中一个引用报错 import com.sun.istack.internal.Nullable; 具体信息如下: Access restriction: ...

  6. ubuntu环境下,ubuntu16.04装机到nvdia显卡驱动安装、cuda8安装、cudnn安装

    首先是安装ubuntu16.04 A.制作u盘启动盘(提前准备好.ios文件): 1.安装u盘制作工具unetbootinsudo apt-get install unetbootin2.格式化u盘s ...

  7. ADC采样间隔问题+TRGO作为ADC的触发源头

    为了控制采样时间,可以使用一个定时器的TRGO(定时器里每次发生更新事件时会有这个信号产生)作为定时器的外部触发. 从定时器框图可以看出,TRGO为TIMx的一个输出.不过这个输出是内部使用的. vo ...

  8. python21期day01笔记总结

    2019.3.27 S21 day01笔记总结 一.计算机基础知识 1.计算机组成 用户 应用软件程序开发——用到了两个方面: 1语法 : 2解释器.编译器.虚拟机: 操作系统的开发 硬件组成 2.操 ...

  9. 在ASP.NET MVC中使用UEditor无法提交的解决办法

    很简单的一个ajax提交,却怎么都不成功 $.ajax({ type: "POST", url: "/mms/riskmanage/commitreply", ...

  10. WM-结汇

    PI发给客户以后, 客户打过来定金之后. 把PI的 P单词去掉,改为只剩invoice, 再把PI改成一份contract为标题的文件,两份文件都是要自己和客户的签字的. 然后需要用这两份文件进行结汇 ...