請問要如何完全的Free掉TField阿?? |
尚未結案
|
sanhang
一般會員 發表:12 回覆:25 積分:17 註冊:2002-08-31 發送簡訊給我 |
各位先進,要如何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 發送簡訊給我 |
試試這方法
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 發送簡訊給我 |
引言: 試試這方法好像還是不太行耶 我的程式類似如下: 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大大的回應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 |
solnone
中階會員 發表:2 回覆:97 積分:69 註冊:2003-05-06 發送簡訊給我 |
|
solnone
中階會員 發表:2 回覆:97 積分:69 註冊:2003-05-06 發送簡訊給我 |
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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |