动态设置表关联 |
答題得分者是:Chance36
|
martinTOP
一般會員 發表:10 回覆:19 積分:5 註冊:2004-06-12 發送簡訊給我 |
我有两个TABLE-TABLE1 和 TABLE2,他们的索引都为Emp_Code,我想用代码给TABL2设置各Field的Displaylabel,然后再设置与TABLE1关联,下面是我的代码,可就是不能实现关联,大大帮忙把把脉。 with TABLE2, FieldDefs do
begin
Close;
FieldDefs.Clear;
Add('Person_ExpEmp_Code', ftString, 0, false);
FieldDefs[0].CreateField(Person_Exp);
TStringField(Fields[0]).FieldName := 'Emp_Code';
TStringField(Fields[0]).DisplayLabel := '员工编号';
end;
下面是设置关联代码
with TABLE2 do
begin
close;
MasterSource := DataSource1;
MasterFields := 'Emp_Code';
IndexFieldNames := 'Emp_Code';
Open;
end; 若没有第一段代码就可以关联,但Displaylabel不能设置,要第一段代码设置Displaylabel,那关联就没反应
请帮忙,谢谢。 發表人 -
|
wang000f
一般會員 發表:16 回覆:28 積分:8 註冊:2003-10-08 發送簡訊給我 |
|
martinTOP
一般會員 發表:10 回覆:19 積分:5 註冊:2004-06-12 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: with TABLE2, FieldDefs do begin Close; FieldDefs.Clear; Add('Person_ExpEmp_Code', ftString, 0, false); FieldDefs[0].CreateField(Person_Exp); TStringField(Fields[0]).FieldName := 'Emp_Code'; TStringField(Fields[0]).DisplayLabel := '员工编号'; end; 下面是设置关联代码 with TABLE2 do begin close; MasterSource := DataSource1; MasterFields := 'Emp_Code'; IndexFieldNames := 'Emp_Code'; Open; end; 若没有第一段代码就可以关联,但Displaylabel不能设置,要第一段代码设置Displaylabel,那关联就没反应 请帮忙,谢谢。 >>< face="Verdana, Arial, Helvetica"> martinTOP 你好 如上紅色部份,為何名稱不同? |
martinTOP
一般會員 發表:10 回覆:19 積分:5 註冊:2004-06-12 發送簡訊給我 |
应该是 With Person_Exp,FieldDefs do
'Person_ExpEmp_Code'是Table Person_Exp加了一个Field Emp_Code,所以他的名称就是'Person_ExpEmp_Code';
我的目的是一个TABLE控件,他联接一个TABLE Person_Exp,这个Table的字段是动态定义的,所以要在一个空的Table控件上加上他的Field及DisplayLabel,并把这个Table和另一Table关联,关联字段是EMP_CODE.
这样的功能怎么实现? 發表人 - martintop 於 2004/06/16 22:22:18
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
martinTOP 你好
試著改成如下看看 with TABLE2, FieldDefs do begin Close; FieldDefs.Clear; Add('Emp_Code', ftString, 0, false); // FieldDefs[0].CreateField(Person_Exp); // 這行可以不用 // TStringField(FieldDefs[0]).FieldName := 'Emp_Code'; TStringField(FieldDefs[0]).DisplayName := '员工编号'; end; 下面是设置关联代码 with TABLE2 do begin close; MasterSource := DataSource1; MasterFields := 'Emp_Code'; IndexFieldNames := 'Emp_Code'; Open; end;發表人 - chance36 於 2004/06/17 01:21:54 |
martinTOP
一般會員 發表:10 回覆:19 積分:5 註冊:2004-06-12 發送簡訊給我 |
谢谢各位热心回复
Close;
FieldDefs.Clear;
// FieldDefs[0].CreateField(Person_Exp); // 這行可以不用
// TStringField(FieldDefs[0]).FieldName := 'Emp_Code';
TStringField(Fields[0]).DisplayLabel := '员工编号';
第一行不用会出现List index out of bounds
第二行不用也不行,因为TABLE的 Field 是Emp_Code,会提示Table's Field "员工编号"not found. 我现在的解决方案是直接放一个Table,不给他CreateField,然后直接关联,这样可以实现Table关联,但是若要用DBGrid显示数据时GridTitle就全部是FieldName,我想显示中文,不知有没有办法,Person_Exp所有Field的Displaylebel都在另一TABLE“DEF”中用sFieldName和sDisplaylabel存储。
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言:martinTOP 你好谢谢? 热??途 Close; FieldDefs.Clear; Add('Emp_Code', ftString, 0, false); // 這行怎麼不見了 // FieldDefs[0].CreateField(Person_Exp); // 餐 ???? // TStringField(FieldDefs[0]).FieldName := 'Emp_Code'; TStringField(Fields[0]).DisplayLabel := '员S编号'; 回頭看一下原問題,你只是要設置各欄位的DisplayLabel而已,怎麼變複雜了呢? 之前的欄位定義皆可省了 下面是设置关联代码 with TABLE2 do begin close; MasterSource := DataSource1; MasterFields := 'Emp_Code'; IndexFieldNames := 'Emp_Code'; Open; // 在Open之後才設置DisplayLabel就可以了,一般多欄位的設定,使用一個Procedure 來處理比較好 If FindField('Emp_Code')<> nil Then FieldByName('Emp_Code').DisplayLabel := '员工编号' ; end; |
martinTOP
一般會員 發表:10 回覆:19 積分:5 註冊:2004-06-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |