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. 【Python】pip国内安装源和yum恢复

    豆瓣安装源 pip install packages -i http://pypi.doubanio.com/simple --upgrade --trusted-host pypi.doubanio ...

  2. 让UITableView的section header view不悬停的方法

    当 UITableView 的 style 属性设置为 Plain 时,这个tableview的section header在滚动时会默认悬停在界面顶端.取消这一特性的方法有两种: 将 style 设 ...

  3. 我的hadoop学习之路

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上. Ha ...

  4. jQuery的appendTo案例

    案例要求:点击双击第一个下拉列表框的选项可以把对应选项移到第二个下拉列表框中,选中第一个列表框的选项(可多选)单击-->按钮可使被选中项移动到右边下拉列表框中,单击==>按钮时将左边的所有 ...

  5. Codeforces Round #438 A. Bark to Unlock

    题意:给你一个原串和n个子串,问你这n个子串任意组合起来能不能使原串出现,串的长度为2. Examples Input ya4ahoytoha Output YES Input hp2http Out ...

  6. linux下redis4.0.2集群部署(利用Ruby脚本命令)

    一.原生命令方式和Ruby脚本方式区别 利用Ruby脚本部署和用原生命令部署,节点准备的步骤都是一样的,节点启动后的握手,以及主从.槽分配,利用Ruby脚本一步就能完成,利用原生命令需要一步一步地执行 ...

  7. Matlab文本处理:提取指定内容

    clc;clear; fileno=1; for i=1:fileno fid2=fopen('4B1T_wb_eq.txt','w'); %save data to 'logfile' in Mat ...

  8. 定时任务APScheduler

    安装 APScheduler $ pip install apscheduler 快速开始 from apscheduler.schedulers.blocking import BlockingSc ...

  9. Linux 里的 2>&1含义

    我们在Linux下经常会碰到nohup command>/dev/null 2>&1 &这样形式的命令.首先我们把这条命令大概分解下: 首先就是一个nohup:表示当前用户 ...

  10. Kettle (5) - 获取 Web 数据

    使用 Kettle 获取网页数据.当然,这里的网页数据主要指结构化数据,可能是 xml 格式.json 格式 或者 csv 文件等.以 http://services.odata.org/V3/Nor ...