EXCEL连接数据库selecttop

在EXCEL中使用VBA窗体可以快速构建一个SQL学习环境,现在给大家分享的是一个通过SQL查询语句实现的分页方法。先看一下效果演示

实现分页的方法是使用两次TOP嵌套使用,首先是以某一字段或ID索引号降序排序取得数据,再以升序排序方法就可以取得想要的分页数记录。

例如:有一个“考试成绩”的数据表,没有ID自动编号,学号是不重复的唯一号,通过学号进行排序实现分页显示。如下图有34条记录,如果要分成10条记录一页,要显示第二页可以这样写,

selecttop10*from(selecttop(34-10*(2-1))*from考试成绩orderby学号desc)orderby学号

其中(34-10*(2-1))意思是“总记录数-每一页要显示的数量*(要显示的页数-1),34-10*(2-1)=24,意思就是从34条记录里从下往上取24条记录,然后外面还有一个”selecttop10*from.(里面的selecttop获取到的24条记录)orderby学号“,意思是从这24条记录里再以升序取前10条记录,相当于第二页的第11-20条记录,为了实现可以自动选择要想显示的页数,上一页,下一页等功能,需要把要显示的页数和每页显示的数量以及要排序的字段都以变量的方法实现。

如:

page=10每页显示的记录数

zd=字段1,字段2,字段3......要显示的字段变量,如果要显示所有变量可以直接星号代替

spage=记录总数-(每页显示数量*(显示页数-1))

SQL=selecttoppagezdfrom(selecttopspage*from数据表名称orderby分页排序字段desc)orderby分页排序字段名

获得记录总数的方法:

cnt=cnn.Execute(selectcount(1)from数据表名称).Fields(0)

上面语句是把查到的记录数返回给变量cnt,其中count(1),里面的1可以写成其它任意数值并不是指第一列,也可以是英文双引号括起来的任意字符串,我的理解可能是把这个数值或字符串,填充到一个虚拟列里进行统计,得到当前表格一共有多个行已经使用,使用星号count(*)可能也是同理,不一定是对所有字段进行计算取最大值。如果是数据表上存在的字段名,则会返回对应列非空单元格的数量。如下面有一个名为”新增字段2“的字段,

使用”selectcount(新增字段2)from考试成绩“语句查询返回值是6,上面的Expr是自动增加的临时字段名,这是一个在数据表里不存在的字段,可以使用别名指定要显示的字段名。

如果存在自动编号字段,计算自动编号字段是效率最高的。如count(id)

如:”selectcount(新增字段2)AS返回值from考试成绩“,将返回下图数据

另外在分页中有一个重要的问题,比如本例中有34条记录,如果每页5条记录,将需要7页,如果每页显示10条记录,将需要4页,但34/5=6.8,34/10=3.4,都不是整数,这时要进位取整,有些数据库有自己的进位取整函数,但是如果没有的话可以使用ABS取绝对值的方法实现,这个函数应该所有数据库都支持。

总页数=Abs(Int(-Abs(总记录数/每页显示数量))),意思先把小数变成负数,如6.8变成-6.8,然后使用int取整函数把-6.8变成-7,然后再使用ABS绝对值变成正数7,int函数应该也是所有数据库都可以使用的函数,退位取整,6.8退位取整是6,-6.8退位取整是-7。

上一页:

If显示页数.value=1Then

MsgBox已经是第一页

Else

显示页数.value=显示页数.value-1

spage=记录总数.Text-(每页显示数量.value*(显示页数.value-1))

SQL=selecttop每页显示数量.valuezdfrom(selecttopspage*from数据表名称5.valueorderby分页排序字段.valuedesc)orderby分页排序字段.value

下一页:

If显示页数.value=总页数.valueThen

MsgBox已经是最后一页

Else

显示页数.value=显示页数.value+1

spage=记录总数.Text-(每页显示数量.value*(显示页数.value-1))

SQL=selecttop每页显示数量.valuezdfrom(selecttopspage*from数据表名称5.valueorderby分页排序字段.valuedesc)orderby分页排序字段.value

最后一页:

spage=记录总数.Text-(每页显示数量.value*(总页数.value-1))

显示页数.value=总页数.value

SQL=selecttop每页显示数量.valuezdfrom(selecttopspage*from数据表名称5.valueorderby分页排序字段.valuedesc)orderby分页排序字段.value




转载请注明:http://www.xcqg58.com/pxxx/pxxx/26847480.html