全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:818
推到 Plurk!
推到 Facebook!

动态设置表关联

答題得分者是:Chance36
martinTOP
一般會員


發表:10
回覆:19
積分:5
註冊:2004-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-16 10:34:43 IP:219.130.xxx.xxx 未訂閱
我有两个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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-16 19:31:31 IP:211.72.xxx.xxx 未訂閱
你一定要用Table來寫嗎? 用TQuery來做動態關連,問題簡單多了,要不要考慮一下呢?
martinTOP
一般會員


發表:10
回覆:19
積分:5
註冊:2004-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-16 20:46:33 IP:219.130.xxx.xxx 未訂閱
谢谢你的回复, 因为我是BDE连接,又要新增、修改数据,所以选用TABLE。 我在想是不是还要设置TABLE的索引? 我对Indexdef之类不熟悉。 请高手帮忙。
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-16 20:59:24 IP:211.20.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-16 22:16:16 IP:219.130.xxx.xxx 未訂閱
应该是 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-17 01:20:00 IP:203.204.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-21 22:53:05 IP:218.16.xxx.xxx 未訂閱
谢谢各位热心回复 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-21 23:58:17 IP:203.204.xxx.xxx 未訂閱
引言:
谢谢? 热??途
  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编号';
martinTOP 你好
  回頭看一下原問題,你只是要設置各欄位的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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-22 08:31:39 IP:218.16.xxx.xxx 未訂閱
非常感谢Chance36大侠,问题解决了。 我开始做得那么复杂是因为在设计时受IDC设计环境的影响,没想到这样就搞定了,以后多向大家学习。
系統時間:2024-07-26 12:21:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!