1.数据库中有6个表
2.平均每个表有15个字段
3.要求:针对每个字段都要做筛选的条件
【问】这么多的字段,都要做为筛选的条件来显示出来给用户选择,应该怎么设计好呢?还要尽量有利于之后的2次筛选

解决方案 »

  1.   

    --b 这么多属性..那给用户查询的时候界面不是很复杂吗? 只能通过动态生成SQL了.. 比如判断界面上某个字段是否选中,再把where条件加在SQL后面..
      

  2.   


    按照您说的~现在出现这样的问题
    例如
    table1 有字段 name , IDCard ,sex ,age
    table2 有字段 name, IDCard, Company, department
    table3 有字段 name,IDCard, ContractBeginTime, ContractEndTime
    现在筛选Company = '单位1' and ContractEndTime < 2008-12-30 的人我这样写SQL对吗?
    select table1.name , table1.IDCard, table1.age, table2.Company, table2.Department, table3.ContractEndTime
    where  table1.name = table2.name and 
           table1.name = table3.name and
           table2.Company = '单位1'  and
           table3. ContractEndTime < 2008-11-30
    这样写对吗?
    如果对的话~可是我还想把他们显示出来~
    我这样定义的
    strFields[] = {"table1.name", "table1.IDCard", "table1.age", "table2.Company", "table2.Department", "table3.ContractEndTime"};
    但在这步是就出现错误了……
    strRetValue[j] = (const char *)_bstr_t(m_pRecordset->GetCollect(_variant_t(strFields[j]);
      

  3.   

    【上面的那个写错了】
    select table1.name , table1.IDCard, table1.age, table2.Company, table2.Department, table3.ContractEndTime 
    from table1, table2, table3
    where  table1.name = table2.name and 
          table1.name = table3.name and 
          table2.Company = '单位1'  and 
          table3. ContractEndTime < 2008-11-30 
      

  4.   

    table3. ContractEndTime < 2008-11-30 
    数据库中时间是什么类型表达的?2008-11-30表达估计有问题,至少两端要加上“'”吧
      

  5.   

    select table1.name , table1.IDCard, table1.age, table2.Company, table2.Department, table3.ContractEndTime 
    from table1, table2, table3 
    where  table1.name = table2.name and 
          table1.name = table3.name and 
          table2.Company = '单位1'  and 
          table3. ContractEndTime < 2008-11-30 改成:
    select table1.name , table1.IDCard, table1.age, table2.Company, table2.Department, table3.ContractEndTime 
    from table1, table2, table3 
    where  table1.name = table2.name and 
          table1.name = table3.name and 
          table2.Company = '单位1'  and 
          table3. ContractEndTime < '2008-11-30' 
      

  6.   

    如果对的话~可是我还想把他们显示出来~ 
    我这样定义的 
    strFields[] = {"table1.name", "table1.IDCard", "table1.age", "table2.Company", "table2.Department", "table3.ContractEndTime"}; 
    但在这步是就出现错误了…… 
    strRetValue[j] = (const char *)_bstr_t(m_pRecordset->GetCollect(_variant_t(strFields[j]); ----------------------------------------------------------------------------------------------------------
    其实我的意思是想说,怎么得到筛选出来的数据?就是每个字段的值,如上,然后显示出来,因为跨表了,所以……
      

  7.   

    你SQL中用别名,然后ADO通过别名访问字段就行了..
    select table1.name as t1name, table1.IDCard as t1ID, table1.age as t1age, table2.Company as t2comp, table2.Department as t2dep, table3.ContractEndTime as t3con 
    from table1, table2, table3 
    where  table1.name = table2.name and 
          table1.name = table3.name and 
          table2.Company = '单位1'  and 
          table3. ContractEndTime < '2008-11-30' ...strFields[] = {"t1name", "t1ID", "t1age", "t2comp", "t2dep", "t3con"}; 
    ...
      

  8.   


    别的先不说~至少我一下就通过了~太兴奋了!tabby~!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!
    你教会了我太多了!!!!!!!!!!!
      

  9.   

    tabby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    谢谢您!!!