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

我的第二个aardio实用程序——Access数据库管理

发布者: jtzmsqzr | 发布时间: 2013-1-12 20:30| 查看数: 6497| 评论数: 16|帖子模式

本帖最后由 jtzmsqzr 于 2013-1-12 20:37 编辑

我的第二个aardio实用程序——Access数据库管理
写程序经常要用到数据库,桌面软件嘛就用桌面数据库了,因此自然就选了Access,管理网页书签,支持常用的CRUD操作,用listview控件管理记录,前后用了2天,可能对其它新手同学有参考,谨拿出来分享。
遇到的问题与解决方法:
1、代码编写规范。一回生两回熟,必须规范自己的代码格式了,我把代码分以下4个区:
1)系统区:包括所有的import语句,以及窗体设计器生成的代码;
2)变量区:包括常用变量的声明;
3)函数区:包括事件处理函数及其它自定义函数;
4)主程序区:包括启动代码。
2、获取Access所有数据表格。所有表格名单必须自动获取,但遇到出现“不能读取记录;在 ’MSysObjects’上没有读取数据权限”的错误提示。借鉴了http://www.fastcache.com.cn/Know ... flycdn_Tech_02.html的经验,问题解决;
3、combobox控件的下拉极限。默认只能显示30行,而我的记录达40行,以为程序错误,其实设置它的滚动条的竖向为true即可;
4、listview控件的填写问题。listview控件的addItem方法只接受纯字符串的数组,故一定要鉴别转换处理:
        for(i=0;rs.Fields.count-1;1){
                str=rs.Fields(i).Value;
                if(type(str)==type.number) str=tostring(str);
                table.push(tabFields,str);
        }
5、函数的通用化。开始写的listview控件填写记录的函数是针对具体的表格编写,后来一想不行,如果表格结构一改动,程序就得重写,必须写出能够支持所有表格的函数,原来的语句是:
wth={40;500;-1};
for(i=0;rs.Fields.count-1;1){
        mainForm.lvRead.insertColumn(rs.Fields(i).Name,wth[i+1])
}
while(!rs.eof){
        mainForm.lvRead.addItem({tostring(rs.Fields(0).Value);rs.Fields(1).Value;rs.Fields(2).Value});
        rs.movenext()
}
优化后改为:
wth={40;500;-1};
for(i=0;rs.Fields.count-1;1){
        mainForm.lvRead.insertColumn(rs.Fields(i).Name,wth[i+1])
}
while(!rs.eof){
        tabFields={};
        for(i=0;rs.Fields.count-1;1){
                str=rs.Fields(i).Value;
                if(type(str)==type.number) str=tostring(str);
                table.push(tabFields,str);
        }
        mainForm.lvRead.addItem(tabFields)
        rs.movenext()
}
不当之处,请指正。

webBook.zip

10.28 KB, 下载次数: 773

评分

参与人数 1银币 +2 收起 理由
村长大人 + 2 很给力!

查看全部评分

最新评论

stillywud 发表于 2013-1-21 12:16:50

感谢分享。

感谢分享。
wjmcu 发表于 2013-2-19 02:40:11

谢谢 感谢分享。

谢谢
感谢分享。
wasb 发表于 2013-3-14 07:25:44

谢谢分享

谢谢分享
半_岛 发表于 2013-3-14 09:17:03

谢谢 感谢分享。

谢谢
感谢分享。
难得糊涂 发表于 2013-3-14 09:24:59

谢谢 感谢分享。

谢谢
感谢分享。
satech 发表于 2013-3-14 10:16:52

好人啊,新手来学习了。。

好人啊,新手来学习了。。
dem 发表于 2013-3-14 11:35:05

{:D}很好的代码,请问wysd.mdb如何生成的?

很好的代码,请问wysd.mdb如何生成的?
vr4u 发表于 2013-3-15 09:55:56

对于每一个listview进行枚举是亮点啊

对于每一个listview进行枚举是亮点啊
jtzmsqzr 发表于 2013-3-15 20:56:33

[quote][size=2][color=#999999]dem 发表于 2013-3-14 11:35[/color] [url=forum.php?mod

dem 发表于 2013-3-14 11:35
很好的代码,请问wysd.mdb如何生成的?

用Access,双击该文件即可看其结构。
suncity 发表于 2014-8-22 19:23:06

[i=s] 本帖最后由 suncity 于 2014-8-22 20:12 编辑 [/i] 如果你重复选择“选择分类”里面的分类表,会在lvRead里重新生成

本帖最后由 suncity 于 2014-8-22 20:12 编辑

如果你重复选择“选择分类”里面的分类表,会在lvRead里重新生成列,多点几次会生成的更多列,
解决办法,删除列
if(mainForm.lvRead.columnCount>1){                //如果列数N大于1列,则删除列N-1列
        for(i=0;mainForm.lvRead.columnCount-1;1){
                mainForm.lvRead.delColumn(mainForm.lvRead.columnCount)
        }
然后再更新
如数据库不够要再加入列,就会报错
wth={40;500;-1};要把这个改成动态的,不会改,想了一个笨的办法
var wth={-1;-1;-1;-1;-1;-1;-1;-1;-1;-1}
        m=rs.Fields.count;
        for(i=1;m+1;1){
        wth=80        //为数组赋值,确定listview列宽
        }
这样可以支持到等宽小于10列的数据表,如何把那个wth弄成自动大小,可以动态支持更多的列?
把这个改成一个人事查询的
当数据在800行20列的时侯,读取在5秒左右(和机器有关),如可以再快点啊
suncity 发表于 2014-8-24 19:58:13

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=67269&ptid=9199][co

suncity 发表于 2014-8-22 19:23
如果你重复选择“选择分类”里面的分类表,会在lvRead里重新生成列,多点几次会生成的更多列,
解决办法, ...

var wth={-1;-1;-1;-1;-1;-1;-1;-1;-1;-1}发现这个写成var wth={-1;-1}这样也行
kaba47 发表于 2016-4-24 00:02:29

新手学习

新手学习
wind 发表于 2017-1-2 18:52:52
学习一下。
wind 发表于 2017-6-2 13:37:23
爱哭的热带鱼 发表于 2017-7-31 11:14:00
谢谢分享,准备写一个密码管理器,管理自己的各种密码~~参开一下

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

GMT+8, 2017-9-25 19:34 , Processed in 0.093750 second(s), 22 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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