搜索
aardio官方社区 门户 查看主题

把数据库查询结果给table再显示到listview问题的解决

发布者: wwwaauto | 发布时间: 2013-10-7 11:04| 查看数: 6254| 评论数: 9|帖子模式

本帖最后由 wwwaardio 于 2013-10-7 11:51 编辑

【阅读对象】初学者
本人是刚学aardio没几天的初学者,昨天做数据库(access)练习的时候,由于对table不熟悉,碰到一个问题折腾了半天才搞定,感觉这个问题的解决对初学者应该很有帮助,于是就写出来献丑一下,希望大牛们多多指点,以求进步。

为了做实验,建了一个简单的数据库
【数据库】access
数据库文件名:data.mdb
表名:用户信息
字段:ID(自动编号)、学号(文本类型)、姓名(文本类型)、性别(文本类型)

连接数据库,这里使用绝对路径,也可以使用相对路径,对于初学者做实验建议使用绝对路径比较容易实现
import access;
var db = access("D:/Access数据库/data.mdb")


新增内容只要按照aardio的范例做都没问题,但是aardio的查询显示范例都是在控制台(黑屏)模式下显示,暂时没找到用listview等来显示的,或者在论坛找到的要么很复杂,要么也没有直接满足我的需求,不过看了有的帖子也受到了启发,最后终于解决了我想要的问题。

在窗体放一个查询的按钮,和一个用于显示的listview的控件,显示网格设为true,然后在查询按钮的执行代码输入下面的代码:

      
        mainForm.listview.clear(); //每次显示前把以前的内容清掉
        if(mainForm.listview.columnCount<=0){ //这个条件限制第一次执行,后面的查询不需要再添加显示列了
          mainForm.listview.insertColumn("学号",80);
          mainForm.listview.insertColumn("姓名",80);
          mainForm.listview.insertColumn("性别",80);
        }
        //下面这段是关键,折腾了我好久
       var tb = db.getTable("select 学号,姓名,性别 from 用户信息");
        for (a,s in tb)
        {
            mainForm.listview.addItem({s["学号"]; s["姓名"]; s["性别"];} );
        }


以上代码中的for (a,s in tb),一定要a,s两个变量,如果for (s in tb)就不行了。通过实验,for (a,s in tb)的变量a对应的是table的行号,s才是对应行的内容。虽然这里用不到行号a,但是还是要放在那里,否则就不行了。不过我现在对table的结构或者使用还是很不了解,希望大牛有空谢教程给予详细使用范例,特别是二维的,一维的范例给的也很多,学习不难,就是范例给的多维数组(或table)范例太少了,初学者很难理解。
   var tb = db.getTable("select 学号,姓名,性别 from 用户信息");
   for (a,s in tb)
   {
      mainForm.listview.addItem({s["学号"]; s["姓名"]; s["性别"];} );
   }

这段代码也可以用
for (rs in db.each("select * from 用户信息"))
  {
      mainForm.listview.addItem({rs("学号").value;rs("姓名").value;rs("性别").value});
  }

来代替,不过对于数据量很大的时候,不知道哪种方式性能好些


最新评论

Jacen.He 发表于 2013-10-7 13:12:45

db.each() 会好一些,因为他一次只是查询一行记录。 而 db.getTable() 是一下子把所有数据都读到内存,如果数据量非常大就不是很好。

db.each() 会好一些,因为他一次只是查询一行记录。
而 db.getTable() 是一下子把所有数据都读到内存,如果数据量非常大就不是很好。

table的成员总是键值对,数组的键则是元素所在们置的索引,所以必而 for k,v in tab{} 这里的 k,v代表 key,value 也就是键值对
wwwaauto 发表于 2013-10-7 14:29:07

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=61869&ptid=10978][c

Jacen 发表于 2013-10-7 13:12
db.each() 会好一些,因为他一次只是查询一行记录。
而 db.getTable() 是一下子把所有数据都读到内存,如 ...

多谢Jacen高手的指点,寥寥几句,看了豁然开朗啊
wwwaauto 发表于 2013-10-7 15:38:25

[i=s] 本帖最后由 wwwaardio 于 2013-10-7 15:39 编辑 [/i] 刚发现 [color=Navy]var tb =

本帖最后由 wwwaardio 于 2013-10-7 15:39 编辑

刚发现
      var tb = db.getTable("select 学号,姓名,性别 from 用户信息");
        for (a,s in tb)
        {
            mainForm.listview.addItem({s["学号"]; s["姓名"]; s["性别"];} );
        }

中的 s["学号"]; s["姓名"]; s["性别"]; 还可以变为 s.学号; s.姓名; s.性别;
也就是说
mainForm.listview.addItem({s["学号"]; s["姓名"]; s["性别"];});
可以变为
mainForm.listview.addItem({s.学号; s.姓名; s.性别;});

table真是神奇哈
roger 发表于 2013-10-7 17:06:31

table就是哈希表,哈希表的成员都是键值对。 s.成员名字 与 s["成员名字"] 都可以取出成员,方括号里是表达式,而圆点后面则直接写成员变量名字

table就是哈希表,哈希表的成员都是键值对。
s.成员名字 与 s["成员名字"] 都可以取出成员,方括号里是表达式,而圆点后面则直接写成员变量名字
lvjing79 发表于 2013-10-7 20:38:41

范例里面的其它数据库的例子多看一下,其实每种数据库的操作都大同小异,你碰到的这种情况在其它例子里面都有的。

范例里面的其它数据库的例子多看一下,其实每种数据库的操作都大同小异,你碰到的这种情况在其它例子里面都有的。
onething 发表于 2013-10-7 22:58:23

学习了

学习了
zhuyun 发表于 2013-12-2 22:16:16

学习了很多东西,谢谢分享

学习了很多东西,谢谢分享
linxues 发表于 2014-8-1 14:33:35

学习了!

学习了!
hejin8288 发表于 2018-1-6 11:14:46
table就是相当于java中的map对象吧,只不过键和值的连接符是“=”,为什么不是:“:呢””

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-24 03:30 , Processed in 0.062503 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表