線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1610
推到 Plurk!
推到 Facebook!

請問要如何完全的Free掉TField阿??

尚未結案
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-21 16:37:12 IP:202.39.xxx.xxx 未訂閱
各位先進,要如何Free掉TField物件呢 我目前要對TQuery物件作動態的新增移除TField物件 新增沒問題,但是Free方面卻無法完全成功 導致runtime中再次Create Tfield物件時會導致Access Violation 我有試過下面兩種方法 MainQuery.Fields.Remove(MainQuery.FieldByName('MyField')); or MainQuery.FieldByName('MyField').Free; 但是卻沒有真正的將該TField的記憶體釋放掉 用MainQuery.FieldByName('MyField') := nil; 跟FreeAndNil(MainQuery.FieldByName('MyField')); 連編譯都不能過 會出現"Left side can not be assign to"的錯誤訊息 請各位大大指教
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-21 16:59:28 IP:61.231.xxx.xxx 未訂閱
試試這方法
type
  TForm1 = class(TForm)
    Table1: TTable;
    Table1O001: TStringField;這是要destory的物件
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin
Table1O001.Destroy;讓table1o001欄位destory
end;
「堅持」從洗馬桶做起 Aric
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-21 17:44:05 IP:211.21.xxx.xxx 未訂閱
引言: 試試這方法
type
  TForm1 = class(TForm)
    Table1: TTable;
    Table1O001: TStringField;這是要destory的物件
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin
Table1O001.Destroy;讓table1o001欄位destory
end;
「堅持」從洗馬桶做起 Aric
好像還是不太行耶 我的程式類似如下: type TForm1 = class(TForm) Table1: TTable; Table1O001: TStringField; Button1: TButton; Button2: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Destroy TField procedure TForm1.Button1Click(Sender: TObject); begin if Table1.FindField('MyField')<>nil then Table1.FieldByName('MyField').Destroy; end; // Create TField procedure TForm1.Button2Click(Sender: TObject); var TF:TStringField; begin if Table1.FindField('MyField')=nil then begin TF := TStringField.Create(Table1); TF.Name := 'Table1MyField'; TF.FieldName := 'MyField'; TF.FieldKind := fkData; TF.DataSet := MainQuery; Table1.Fields.Add(TF); end; end; 第一次Create跟Destroy都沒問題 第二次Create竟會跳過if Table1.FindField('MyField')=nil then下的區段 表示目前Table1.FindField('MyField')<>nil 還有....為什麼TStringField不能夠使用Nil跟FreeAndNil呢?? 不是繼承TField來的嗎? 謝謝huangeider大大的回應
solnone
中階會員


發表:2
回覆:97
積分:69
註冊:2003-05-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-22 11:32:06 IP:203.66.xxx.xxx 未訂閱
// Destroy TField procedure TForm1.Button1Click(Sender: TObject); var field: TField; begin field := Table1.FindField('MyField'); if field <> nil then begin Table1.Fields.Remove(field); Table2.Fields.Remove(field); field.Free; end; end;
solnone
中階會員


發表:2
回覆:97
積分:69
註冊:2003-05-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-22 11:34:04 IP:203.66.xxx.xxx 未訂閱
sorry,沒有table2,是 MainQuery 才對 // Destroy TField procedure TForm1.Button1Click(Sender: TObject); var field: TField; begin field := Table1.FindField('MyField'); if field <> nil then begin Table1.Fields.Remove(field); MainQuery.Fields.Remove(field); field.Free; end; end;
系統時間:2024-04-28 5:39:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!