不知各位做过“通用查询”没有,想象大家讨教一下,思路,算法什么的就拿《数据库系统概论》(萨师煊,王珊版)中的3张表为例Table1
Student:
学号,姓名,性别,年龄,所在系Table2
Course:
课程号,课程名,学分Table3
SC:
学号,课程号,成绩
使得一些基本的查询都可以在“通用查询”中实现譬如:选修了maths的学号及姓名
      选修了课号为C1,C2的学生姓名
      至少……的查询问题
      只干什么的查询问题真诚象大家讨教了,谢谢
 

解决方案 »

  1.   

    通用查詢(隻提供一個思路):
    1:有指定數據表,可能過DBGrid,DataSource.Data獲取數據字段及字段類型
    添加到下拉列表或列表框中(中間可做轉化);
    2:當有選擇時,記錄選擇的字段及條件,生成SQL語句
    3:執行SQL語句
      

  2.   

    我以前用Foxpro做过这样的表单,调用时只要传一个表名过去就可以随意查询各项记录了。
    思路是这样的:用一个函数得出表结构并赋值给一个数组,之后从用户程序界面中组合出一个“查询内容”,所谓“查询内容”是这样的:观察一个select语句格式--select * from XXX where YYYYY,实则是select 语句的where关键字后面的表达式.(希望这样说不会越说越说糊涂).......我现在正在学习Delphi,但暂还未找到这样的函数,请各位路过的指点一下。谢谢!
      

  3.   

    就是拼sql。
    通用查询也是在一定范围内的数据表,不是那么任意的。
    添加一个字段对照表,即:wlbmc(物理表名称),wlzdm(物理字段名),
    ljbmc(逻辑表名称),ljzdm(逻辑字段名),zdlx(字段类型),zdcd(字段长度)...
    界面上让用户选择进行查询的表,然后选择查询的条件(各个条件之间还有and和or的关系,还要能加括号),当然显示给用户的都是汉字的表名和字段名,
    你把这些个条件在代码里面拼成sql,然后执行,把结果显示到dbgrid里面,这个结果再能倒出到excel,进行打印。
      

  4.   

    Delphi中这是一个难点, 因为所谓通用查询我考虑是如下几点:排序、过滤、查找、导出为Excel、选定显示列、分组统计、及挂接的打印。
    以前用PB做过,很容易实现
    用Delphi估计分组统计最难实现, 过滤也不象想象的那样简单, 因为要考虑字段的类型(是否计算字段, 是否查找字段)还要考虑是否有转义,  比如数据库中存的是01, 而显示出来的是'男女', 这在PB中容易实现。
    分组就更难办了。
    至于其它,用Ehlib控件类都很容易解决, 找找以前的贴子吧再有www.playicq.com上有一个据说是通用查询的例子,一直没看过,不知是否可用
      

  5.   

    我刚好做过类型的,顺便说说。首先要建立要查询各表的信息。
    QTableInfo存放表的一些信息,比如表名,表的中文名,表的主键,父表,和父表的关联关系等。
    QFieldInfo存放字段的一些信息,比如字段所在数据库,所在表,名称,中文名,类型,长度,是否是真实字段等等.其次是思路,无非是让用户手工把SQL语句拼出来。
    首先让用户选择一个表,再选一个对应的子表(如果用户需要),这些可以从QTableInfo中获得,其中关联关系可以把这两个表联起来。
    再根据用户选择的的表给出所有可用字段,让用户选择输出,如果你想完美,也可以再上面给出统计的选项(比如和,平均等等)。
    其次是条件的生成,无非是大于等于小于近似于,用两个COMBOBOX(一个放字段列表,一个放条件)和一个EDIT(让用户输入值)就可以,对于多个这样的条件,可以再考虑加上AND和OR之类的。
    最后是排序,让用户选择。如果用了统计,此时生成GROUP再生成排序字段。最后根据界面组合成SQL语句发送出去,这应该不是难事。最重要的一点:
    请注意,用户几乎不可能组成正确的查询,因此尽量提供对查询方案的保存和读取功能。这样你可以自己定制一些方案让用户去查,省得再写存储过程了。