读书人

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

发布时间: 2013-01-26 13:47:04 作者: rapoo

clientdataset获取sql语句中的真正列名
本帖最后由 herlockkn 于 2012-05-25 09:50:59 编辑 有多个表,都要通过下面的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前面和逗号(,)后面的字符等
[解决办法]

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;

[解决办法]
动态创建也没什么难的!

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

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

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

读书人网 >.NET

热点推荐