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. 面试回顾——List<T>排序

    1.如何对List<T>排序: public static void main(String[] args) { Student stu1=new Student("张三&quo ...

  2. C++学习基础十六-- 函数学习笔记

    C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...

  3. jmeter压测之添加负载机

    jmeter压测基本介绍一般基准测试(基准测试时间一般为5分钟)后压测的时间是10-15分钟: 实施测试之前要拿到测试指标 例如:tps要达到多少响应时间要达到多少并发数要达到多少TPS :服务端每秒 ...

  4. HTML-全局属性 / 事件属性(转)

    拷贝自:< http://www.runoob.com > HTML 全局属性 New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规 ...

  5. laravel PHPExcel 使用小结

    最近需求要用到PHPExcel,laravel框架中有相应的组件https://github.com/Maatwebsite/Laravel-Excel,我用的是2.1的(3.0文档不详细而且坑似乎也 ...

  6. 【Nodejs】Nodejsの環境構築

    参考URL:http://www.runoob.com/nodejs/nodejs-install-setup.html Windowにインストールする方法を紹介します. ▲ダウンロードURL:htt ...

  7. Python SMTP发送邮件

    import smtplibfrom email.mime.text import MIMEText  # 引入smtplib和MIMEText host = 'smtp.163.com'  # 设置 ...

  8. spring整合mybatis在使用.properties文件时候遇到的问题

    在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致P ...

  9. Block学习总结

    最近网上浏览了一些关于Block的文章,自己进行一下消化吸收. Void (^blockName)(parma)-> Block声明 Void (^) (parma){};  ->Bloc ...

  10. 大数据OLAP引擎对比

    Presto:内存计算,mpp架构   PB级别数据 presto适合pb级的海量数据查询分析,不是说把pb的数据放进内存,比如一张pb表,查询count,vag这种有个特点,虽然数据很多,但是最终的 ...