SQLSERVER2000 数据库
我有一个人员表(A001) (字段是不固定的,用户可以增加字段)
姓名 编号 性别 民族 ........
张三 01 1 01
李四 02 2 02还有一个代码表(sr_code)
类别 代码 描述
AX 1 男
AX 2 女
AE 01 汉族
AE 02 回族
AE 03 满族
AC 01 健康
AC 02 一般
。。请问怎么用 DBGrid 显示数据
姓名 编号 性别 民族 ........
张三 01 男 汉族
李四 02 女 回族当用户自己在A001 表中增加一个字段 健康状况 并指定代码为 AC
又怎么显示。(用户还可以增加其他字段)
我有一个人员表(A001) (字段是不固定的,用户可以增加字段)
姓名 编号 性别 民族 ........
张三 01 1 01
李四 02 2 02还有一个代码表(sr_code)
类别 代码 描述
AX 1 男
AX 2 女
AE 01 汉族
AE 02 回族
AE 03 满族
AC 01 健康
AC 02 一般
。。请问怎么用 DBGrid 显示数据
姓名 编号 性别 民族 ........
张三 01 男 汉族
李四 02 女 回族当用户自己在A001 表中增加一个字段 健康状况 并指定代码为 AC
又怎么显示。(用户还可以增加其他字段)
select A001.姓名,A001.编号,b.描述,c.描述
from A001,
(select 代码,描述 from sr_code where 类别='AX') as a,
(select 代码,描述 from sr_code where 类别='AE') as b
where A001.性别=a.代码
and A001.民族=b.代码
其实StringGrid还是很好控制
dbgrid只有一个DataSource的连接,所以你只能想办法在程序里用sql语句控制结果集,然后显示出来
先select代码表所有类别,用delphi循环动态拼一句完整的SQL类似:SQL.Text:='select distinct 类别 from sr_code';
Open;while not query.eof dokind:=FieldByName(‘类别’).AsString;fromStr:=fromStr+'(select 代码,描述 from sr_code where 类别='''+kind+''') as '+kind+',';
whereStr:=whereStr+’and A001……’end;这样
最后去掉开头结尾的and和逗号,然后一起拼成一句完整的SQL:‘select …..’+fromStr+whereStr…….不知道我写清楚没有
直接在ADOQUERY 的字段属性中写
如性别字段 ,则在性别的OnGetText中写
procedure TForm1.ADOQuery1性别GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
var TmpQuery : TADOQuery;
begin
try
TmpQuery := TADOQuery.Create(nil);
with TmpQuery do
begin
Close;
SQL.Text := 'Select 描述 from sr_code where 类别=''AX'' and 代码=' + QuotedStr(Sender.Text);
Open;
end;
Text := TmpQuery.FieldByName('描述').AsString;
finally
TmpQuery.Free;
end;
end;
Create View v_A
As
select A001.姓名,A001.编号,b.描述,c.描述
from A001,
(select 代码,描述 from sr_code where 类别='AX') as a,
(select 代码,描述 from sr_code where 类别='AE') as b
where A001.性别=a.代码
and A001.民族=b.代码通过Query加载视图;
数据的结构直接在视图中更新代码;