推荐vsflexgrid 当然mshflexgrid亦可/* 用存储过程实现的分页程序*/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_show] GO CREATE Proc p_show @QueryStr nvarchar(1000), --查询语句,如果查询表,用:select * from 表 @PageSize int=10, --每页的大小(行数) @PageCurrent int=1, --要显示的页 @FdShow nvarchar (1000)='', --要显示的字段列表,用逗号分隔。(如果查询结果有标识字段,需要指定此值,且不包含标识字段 ) @FdOrder nvarchar (1000)='' --排序字段列表,用逗号分隔 as declare @FdName nvarchar(50) --标识列名 ,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号 select @FdName='[ID_'+cast(newid() as varchar(40))+']' ,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20)) ,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20)) ,@FdShow=case isnull(@FdShow,'') when '' then '*' else @FdShow end ,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+' into #tb from('+@QueryStr+') a '+@FdOrder+' select '+@FdShow+' from #tb where '+@FdName+' between ' +@Id1+' and '+@Id2 ) GO
如此多的數據﹐建議用datagrid來顯示﹐其耗內存較少
用什么显示无所谓,但可以将数据分次取入内存,每次翻页重新刷新Grid
如果要说速度快,vb中DataGrid比mshflexGrid 和msflexGrid 快!建议用DataGrid 还有就是楼主一下子显示那么多数据干什么?在写程序的时候尽量避免用:Select * From Table 这种方式 数据量太大,显示30万多条数据,基本上是没有意义的! 建议还是分页显示!
当然mshflexgrid亦可/*
用存储过程实现的分页程序*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_show]
GO
CREATE Proc p_show
@QueryStr nvarchar(1000), --查询语句,如果查询表,用:select * from 表
@PageSize int=10, --每页的大小(行数)
@PageCurrent int=1, --要显示的页
@FdShow nvarchar (1000)='', --要显示的字段列表,用逗号分隔。(如果查询结果有标识字段,需要指定此值,且不包含标识字段 )
@FdOrder nvarchar (1000)='' --排序字段列表,用逗号分隔
as
declare @FdName nvarchar(50) --标识列名
,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
select @FdName='[ID_'+cast(newid() as varchar(40))+']'
,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))
,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))
,@FdShow=case isnull(@FdShow,'') when '' then '*' else @FdShow end
,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'
into #tb from('+@QueryStr+') a '+@FdOrder+'
select '+@FdShow+' from #tb where '+@FdName+' between '
+@Id1+' and '+@Id2
)
GO
还有就是楼主一下子显示那么多数据干什么?在写程序的时候尽量避免用:Select * From Table 这种方式
数据量太大,显示30万多条数据,基本上是没有意义的!
建议还是分页显示!