分享

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

 战神之家 2015-02-15
 本帖最后由 wwwaauto 于 2013-10-7 11:51 编辑

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

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

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


新增内容只要按照aauto的范例做都没问题,但是aauto的查询显示范例都是在控制台(黑屏)模式下显示,暂时没找到用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});
  }

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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约