不知各位做过“通用查询”没有,想象大家讨教一下,思路,算法什么的就拿《数据库系统概论》(萨师煊,王珊版)中的3张表为例Table1
Student:
学号,姓名,性别,年龄,所在系Table2
Course:
课程号,课程名,学分Table3
SC:
学号,课程号,成绩
使得一些基本的查询都可以在“通用查询”中实现譬如:选修了maths的学号及姓名
选修了课号为C1,C2的学生姓名
至少……的查询问题
只干什么的查询问题真诚象大家讨教了,谢谢
Student:
学号,姓名,性别,年龄,所在系Table2
Course:
课程号,课程名,学分Table3
SC:
学号,课程号,成绩
使得一些基本的查询都可以在“通用查询”中实现譬如:选修了maths的学号及姓名
选修了课号为C1,C2的学生姓名
至少……的查询问题
只干什么的查询问题真诚象大家讨教了,谢谢
解决方案 »
- 事务控制问题
- 如何在MDI窗体中调用MDI子窗体?
- 手机数据线主要用处是什么?从开始方面考虑。
- 有谁见过这的错误?("FORM子句语法错误")?与adoconnection和adotable有关.
- 如何判断一封邮件的CHARSET,注意:邮件的源代码中没有CHARSET信息
- Tquery组件的问题?
- 招商银行凭什么泄漏信用卡资料给其它公司用于商业用途?
- delphi xe5一般都装了 那个版本java?
- 请问将char转为string,该怎么转换?
- Delphi Will Never Die!!! Tomorrow Will Never Die!!!
- 在程序中指定Table的TableName属性????急啊
- 在treeview中使用右健菜单事件,高分请教,
1:有指定數據表,可能過DBGrid,DataSource.Data獲取數據字段及字段類型
添加到下拉列表或列表框中(中間可做轉化);
2:當有選擇時,記錄選擇的字段及條件,生成SQL語句
3:執行SQL語句
思路是这样的:用一个函数得出表结构并赋值给一个数组,之后从用户程序界面中组合出一个“查询内容”,所谓“查询内容”是这样的:观察一个select语句格式--select * from XXX where YYYYY,实则是select 语句的where关键字后面的表达式.(希望这样说不会越说越说糊涂).......我现在正在学习Delphi,但暂还未找到这样的函数,请各位路过的指点一下。谢谢!
通用查询也是在一定范围内的数据表,不是那么任意的。
添加一个字段对照表,即:wlbmc(物理表名称),wlzdm(物理字段名),
ljbmc(逻辑表名称),ljzdm(逻辑字段名),zdlx(字段类型),zdcd(字段长度)...
界面上让用户选择进行查询的表,然后选择查询的条件(各个条件之间还有and和or的关系,还要能加括号),当然显示给用户的都是汉字的表名和字段名,
你把这些个条件在代码里面拼成sql,然后执行,把结果显示到dbgrid里面,这个结果再能倒出到excel,进行打印。
以前用PB做过,很容易实现
用Delphi估计分组统计最难实现, 过滤也不象想象的那样简单, 因为要考虑字段的类型(是否计算字段, 是否查找字段)还要考虑是否有转义, 比如数据库中存的是01, 而显示出来的是'男女', 这在PB中容易实现。
分组就更难办了。
至于其它,用Ehlib控件类都很容易解决, 找找以前的贴子吧再有www.playicq.com上有一个据说是通用查询的例子,一直没看过,不知是否可用
QTableInfo存放表的一些信息,比如表名,表的中文名,表的主键,父表,和父表的关联关系等。
QFieldInfo存放字段的一些信息,比如字段所在数据库,所在表,名称,中文名,类型,长度,是否是真实字段等等.其次是思路,无非是让用户手工把SQL语句拼出来。
首先让用户选择一个表,再选一个对应的子表(如果用户需要),这些可以从QTableInfo中获得,其中关联关系可以把这两个表联起来。
再根据用户选择的的表给出所有可用字段,让用户选择输出,如果你想完美,也可以再上面给出统计的选项(比如和,平均等等)。
其次是条件的生成,无非是大于等于小于近似于,用两个COMBOBOX(一个放字段列表,一个放条件)和一个EDIT(让用户输入值)就可以,对于多个这样的条件,可以再考虑加上AND和OR之类的。
最后是排序,让用户选择。如果用了统计,此时生成GROUP再生成排序字段。最后根据界面组合成SQL语句发送出去,这应该不是难事。最重要的一点:
请注意,用户几乎不可能组成正确的查询,因此尽量提供对查询方案的保存和读取功能。这样你可以自己定制一些方案让用户去查,省得再写存储过程了。