本帖最后由 herlockkn 于 2012-05-25 09:50:59 编辑

解决方案 »

  1.   

    sql语句别用as别名了,你在表格上自己手动添加列,设置列的显示,这样 ClientDatase都是原始的字段名
      

  2.   

    可以
    但是写SQL语句时需要一定的规则,不然会截取错误,比如截取as前面和逗号(,)后面的字符等
      

  3.   

    function GetRealFieldName(const TableName, FieldAlias: string): string;
    type
      TRec = record
        TableName, RealFieldName, FieldAlias: string;
      end;
    const
      S: array [0..3] of TRec = (
        (TableName: 'table1'; RealFieldName: 'table1column1'; FieldAlias: '学号'),
        (TableName: 'table1'; RealFieldName: 'table1column2'; FieldAlias: '姓名'),
        (TableName: 'table2'; RealFieldName: 'table2column1'; FieldAlias: '学号'),
        (TableName: 'table2'; RealFieldName: 'table2column2'; FieldAlias: '姓名')
      );
    var
      I: Integer;
    begin
      for I := Low(S) to High(S) do
        if (TableName = S[I].TableName) and (FieldAlias = S[I].FieldAlias) then
        begin
          Result := S[I].RealFieldName;
          Exit
        end;  Result := FieldAlias
    end;
      

  4.   


    你是说人为的设置Grid的Title-Caption属性,然后用Caption作为查询条件?可是Grid中的列是根据数据集中的数据动态生成的
      

  5.   

    TO:s11ss(skull)
    感谢你费这么打劲写代码,这样写比较死,不太灵活。Grid是动态创建的。
      

  6.   

    动态创建也没什么难的!我以前就做过这样的设计,而且实现得很好!无非就是要传入表名(或其他数据集名称)、主键等
    通过表名可以获得相应的字段名,Grid标题有Title,对应字段名就是Fields
    通过循环(这里可能要用嵌套循环)进行校验,对应标题相同的就取字段名出来与之对应。代码就更简单了,只要思路清晰了,代码也就没什么神奇啦!