1. 程式人生 > >Delphi調用SQL分頁存儲過程實例

Delphi調用SQL分頁存儲過程實例

char sele des 高度 nbsp dna procedure one 變量

Delphi調用SQL分頁存儲過程實例 (2008-11-18 17:12:35)轉載▼
標簽: 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=10 ,--每頁顯示的記錄數 @PageCurrent int=1 ,--當前要顯示的頁號 @FdName varchar(100)=‘‘ ,--主鍵名或者標識列名 @SelectStr varchar(2000)=‘‘, --select子句,不包含select關鍵字,如:*或者Id,UserId,UserName等。 @FromStr varchar(1000)=‘‘, --from子句,不包含from關鍵子,如:myTable或者myTable,yourTable @WhereStr varchar(
2000)=‘‘, --Where子句,不包含where關鍵字,如空的,或者 id>2 等 @OrderByStr varchar(1000)=‘‘,--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等 @CountRows int=0 output, --返回記錄總數 @CountPage int=0 output --返回總頁數 as --------定義局部變量--------- declare @Id1 varchar(20),@Id2 varchar(20) --開始和結束的記錄號 declare @OrderBySqls varchar(
1000) --order by 子句 declare @WhereSqls varchar(2000) --where 子句 declare @Sqls nvarchar(4000) --最終組合成的Sqls語句 declare @TmpStr varchar(2000) --臨時 ---------------------------- 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<=1 begin select @Id1=cast(@PageSize as varchar(20)) exec(select top +@Id1+ +@SelectStr+ from +@FromStr+@WhereSqls+@OrderBySqls) goto LabelRes end --------------------------- select @Id1=cast(@PageSize as varchar(20)) ,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20)) ---------- 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 = 1 else begin set @CountPage = @CountRows/@PageSize if (@CountRows%@PageSize) > 0 set @CountPage = @CountPage + 1 end return GO //----分頁存儲過程結束--------------------------------------------------------------------------------------- //----Delphi7調用過程開始---------------------------------------------------------------------------------------- 首先在 public 中定義 i, RsCount: integer; 在frmMain中放置一個dbgrid , datasource, AdoStoredProc [name->sp], 和4個 Button, 設置好相關連接! procedure TfrmMain.btnFirstClick(Sender: TObject); begin i := 1; sp.ProcedureName := PageShowOne;1; sp.Close; sp.Parameters.ParamByName(@PageSize).Value := 50; 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 + 1; sp.ProcedureName := PageShowOne;1; sp.Close; sp.Parameters.ParamByName(@PageSize).Value := 50; 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 > 1 then i := i - 1 else ShowMessage(已經是第一頁了!); sp.ProcedureName := PageShowOne;1; sp.Close; sp.Parameters.ParamByName(@PageSize).Value := 50; 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 := 50; 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分頁存儲過程實例