首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

clientdataset获取sql话语中的真正列名

2012-09-07 
clientdataset获取sql语句中的真正列名有多个表,都要通过下面的sql查询数据:select table1column1 as 学号

clientdataset获取sql语句中的真正列名
有多个表,都要通过下面的sql查询数据:select table1column1 as 学号, table1column2 as 姓名 from table1 ,select table2column1 as 学号, table2column2 as 姓名 from table2 ...
多个表中的学号列在数据库中的实际列名不同,在程序中用ClientDataset做个查询,要求条件是学号在某个范围中如:where 学号 >= 1 and 学号 <= 5
现在想知道如何通过ClientDatase获取数据库中真正的列名?请高手帮忙解决一下。谢谢。(就是在程序中通过sql中的别名找到它在数据库中的列名是什么)



[解决办法]
sql语句别用as别名了,你在表格上自己手动添加列,设置列的显示,这样 ClientDatase都是原始的字段名
[解决办法]
可以
但是写SQL语句时需要一定的规则,不然会截取错误,比如截取as前面和逗号(,)后面的字符等
[解决办法]

Delphi(Pascal) code
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 := FieldAliasend;
[解决办法]
动态创建也没什么难的!

我以前就做过这样的设计,而且实现得很好!

无非就是要传入表名(或其他数据集名称)、主键等
通过表名可以获得相应的字段名,Grid标题有Title,对应字段名就是Fields
通过循环(这里可能要用嵌套循环)进行校验,对应标题相同的就取字段名出来与之对应。

代码就更简单了,只要思路清晰了,代码也就没什么神奇啦!

热点排行