tree listbox combox 数据表关系 数据库 高效
有如下表
categories:
cate_id int autoinc, cate_name char(xx)
files:
file_id int autoinc, file_cate int, file_path char(xx), file_body blob
界面上一个下拉列表控件,内容为所有cate_name
一个列表框,内容为所有file_path,
一个Memo,内容为对应file的内容
+-----------------+ +----------------------------------------------+
| 类别N | v | | |
+-----------------+ | |
| |
+-----------------+ | |
|c:\win\sub\file.x| | |
| | | |
| | | |
| | | |
| | | |
| | | |
+-----------------+ +---------------------------------------------+
要求:
读取相应类别中某个文件的内容.
分析:
下拉框类别Index与数据库中cate_id无任何对应关系,因为类别可以被删除,会出现不连续的cate_id
所以下拉框两种返回值中的Index不可用,只好用Text文本.
现在当我切换下拉框类别时,要求列表框里的数据根据下拉框中的Text(对应表中的cate_name)来做相应变换.
因为files表中无cate_name,只有cate_id,所以必须先获取对应cate_name的cate_id, 根据获取的cate_id查询files
同样,先择列表框中的一行,获取Text数据, 然后直接查询文件内容
B. 解决方案是:
1. 下拉框切换时,获取其内容CN(cate_name)
2. 在categories表中查找对应CID: select cate_id from categories where cate_name = 'CN'
3. 在files表中查询所有记录: select file_path from files where file_cate = CID
4. 单/双击列表框时,获取对应Text PATH
5. 在files表中查询记录: select file_body from files where file_path = 'PATH'
问题1:
我觉得这种做法,很不合理,如果我的categories表非常大,那么这样做法效率相当低,不知道是否有更好的办法
问题2:
因为files表中根据files_id来区分唯一记录, 这样如果文件PATH相同(列表框中会显示两/多条一样的内容),则无法处理这样情况.
注:
1. 用标准控件,控件与数据库字段不绑定.
2. 暂不考虑用ListView等多列控件来保存记录的ID值,用了这类控件,界面效果不一样
3. 考虑过重构ListBox类,CombBox类,加入变量记录ID,但觉得不是最后的解决方案