请问怎么将 Adoquery 数据集进行分页并按页码显示在DBGRID中
解决方案 »
- adoconnection.excute删除数据时如何使用进度条
- 怎样判断ADOQuery数据集中的记录数是否为空,也就是判断数据集中是否有数据?
- 刷新参数时自动退出delphi7
- 要写编写控件得论文了谁有什么心得啊说一下!有分送啊
- Edit控件有onMouseMove, onMouseDown事件,但ComboBox,datetimepicker控件没有类似的事件,现在想要在这些控件上用到onMouseMove,onMouse
- 散点分 不够再开3
- 给这段代码加注释!
- 高分求救,下面SQL语句有没有错.
- treeview的输入焦点的控制
- 请问为何工程执行是出现"Can't focus a disabled or invisible windows"的错误提示?谢谢!!
- 谁用过PICSHOW控件的来帮忙看看吧!报错~~
- listview 删除一行中重复列值的行
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB,Grids, DBGrids, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ListView1: TListView;
Label1: TLabel;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure Page_Count;
public
{ Public declarations }
end;
var
Form1: TForm1;
page: integer;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
ListItem:TListItem;
i:integer;
begin
with AdoConnection1 do
begin
ConnectionString := '连接串';
open();
end;
Page := 0;
end;procedure TForm1.Page_Count;
var
i:integer;
ListItem:TListItem;
begin
ListView1.Clear;
with AdoQuery1 do
begin
Connection := AdoConnection1;
sql.Clear;
sql.Add('select a,b from tmplive');
open;
if Page = 0 then Page := 1;
if Page > RecordSet.RecordCount then page := RecordSet.RecordCount;
Recordset.PageSize := 10;
RecordSet.AbsolutePage := Page;
for i:= 1 to Recordset.PageSize do
begin
ListItem := ListView1.Items.Add;
ListItem.SubItems.Add(RecordSet.Fields.Item[0].value);
ListItem.SubItems.Add(RecordSet.Fields.Item[1].Value);
Next;
if RecordSet.EOF then exit;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Page := Page+1;
Page_Count;
Label1.Caption := IntToStr(Page);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Page := Page -1;
Page_Count;
Label1.Caption := IntToStr(Page);
end;end.
CREATE PROCEDURE [dbo].[Sp_GetPagedResult_Datas]
(
@TableName NVARCHAR(100),
@FiledName NVARCHAR(100),
@PageIndex INT,
@PageSize INT
)
AS
DECLARE @BeginRow INT,@EndRow INT,@SQL NVARCHAR(1000);
SET @BeginRow=0;
SET @EndRow=0;
SET @BeginRow=(@PageIndex-1)*@PageSize+1;
SET @EndRow=@PageIndex*@PageSize;IF(Len(ISNULL(@TableName,''))>0)
BEGIN
IF (LEN(ISNULL(@FiledName,''))>0)
BEGIN
SET @SQL=ISNULL(@SQL,'');
SET @SQL=@SQL+'WITH TMP AS ( SELECT *,ROW_NUMBER() OVER( ORDER BY '+@FiledName+') AS ROWNUM FROM '+@TableName+') ';
SET @SQL=@SQL+' SELECT * FROM TMP WHERE ROWNUM BETWEEN '+CAST(@BeginRow AS NVARCHAR)+' AND '+ CAST(@EndRow AS NVARCHAR);
PRINT @SQL;
EXEC (@SQL);
END
END GO
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB,Grids, DBGrids, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ListView1: TListView;
Label1: TLabel;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure Page_Count;
public
{ Public declarations }
end;
var
Form1: TForm1;
page: integer;
CT:Boolean=False;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
ListItem:TListItem;
i:integer;
begin
with AdoConnection1 do
begin
ConnectionString := '连接串';
open();
end;
Page := 0;
ListView1.ViewStyle:=vsReport;//不设置无法显示
end;procedure TForm1.Page_Count;
var
i:integer;
ListItem:TListItem;
begin
ListView1.Clear;
with AdoQuery1 do
begin
//Connection := AdoConnection1;
//sql.Clear;
//sql.Add('select a,b from tmplive');
//open;
if not CT then
begin
Connection := AdoConnection1;
sql.Clear;
sql.Add('select a,b from tmplive');
open;
for i:=0 to FieldCount-1 do
begin
TempColumn:=self.ListView1.Columns.Add;
TempColumn.Caption:=Fields[i].FieldName;
end;
ct:=true;
First;
end;
if Page = 0 then Page := 1;
if Page > RecordSet.RecordCount then page := RecordSet.RecordCount;
Recordset.PageSize := 10;
RecordSet.AbsolutePage := Page;
for i:= 1 to Recordset.PageSize do
begin
ListItem := ListView1.Items.Add;
ListItem.Caption:=RecordSet.Fields.Item[0].value;
//ListItem.SubItems.Add(RecordSet.Fields.Item[0].value);
ListItem.SubItems.Add(RecordSet.Fields.Item[1].Value);
Recordset.MoveNext;//由原来next->Recordset.MoveNext
if RecordSet.EOF then exit;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Page := Page+1;
Page_Count;
Label1.Caption := IntToStr(Page);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Page := Page -1;
Page_Count;
Label1.Caption := IntToStr(Page);
end;end.
测试1楼的不能显示
在1楼基础上修改后可以显示分页效果
procedure TForm1.Page_Count;
var
i:integer;
ListItem:TListItem;
TempColumn:TListColumn;
begin
ListView1.Clear;
with AdoQuery1 do
begin
//Connection := AdoConnection1;
//sql.Clear;
//sql.Add('select a,b from tmplive');
//open;
if not CT then
begin
Connection := AdoConnection1;
sql.Clear;
sql.Add('select a,b from tmplive');
open;
for i:=0 to FieldCount-1 do
begin
TempColumn:=self.ListView1.Columns.Add;
TempColumn.Caption:=Fields[i].FieldName;
end;
ct:=true;
First;
end;
if Page = 0 then Page := 1;
if Page > RecordSet.RecordCount then page := RecordSet.RecordCount;
Recordset.PageSize := 10;
RecordSet.AbsolutePage := Page;
for i:= 1 to Recordset.PageSize do
begin
ListItem := ListView1.Items.Add;
ListItem.Caption:=RecordSet.Fields.Item[0].value;
//ListItem.SubItems.Add(RecordSet.Fields.Item[0].value);
ListItem.SubItems.Add(RecordSet.Fields.Item[1].Value);
Recordset.MoveNext;//由原来next->Recordset.MoveNext
if RecordSet.EOF then exit;
end;
end;
end;
修改上面TempColumn变量没定义