如何以程式碼定義 field |
答題得分者是:hagar
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位! 我有一個query已指定好, 且資料庫是已經存在的, 假設有
USERID string
USERNAME string
USERNO integer
PS string
四個欄位 我要如何在 fields editor 中以程式來加入欄位
以往我們都是利用滑鼠右鍵點 ADD FIELDS 或 ADD ALL FIELDS 方式建立
但我現要用程式來做(這是有目的), 我要如何做才能達到目標呢? 以下是我試的方式
with aQuery.FieldDefs do begin Clear; for i:= 0 to aEnableNums-1 do begin if aFieldType[i]='C' then aType:= ftString else if aFieldType[i]='N' then aType:= ftInteger else if aFieldType[i]='F' then aType:= ftFloat else if aFieldType[i]='D' then aType:= ftDateTime else if aFieldType[i]='B' then aType:= ftBoolean else aType:= ftUnknown; // Add(aFieldName[i],aType); with AddFieldDef do begin Name := aFieldName[i]; DataType:= aType; Required:= False; FieldNo := i; end; end; end;ps: // 這部份我也試過不行 如此做法程式沒有問題, 但執行時在aQuery.Open後, 如果引用 aQueryUSERID.Value....會出現 aQuery:Field 'USERID' not Found 請各位指點一二, 謝謝! |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
1.Create 部份
procedure BoAutoCreateTFields( Yourdataset : TDataSet ); var TmpField: TField; i: Integer; begin Yourdataset.Fielddefs.Update; for i:= 0 to Pred(YourDataset.FieldDefs.Count) do begin TmpField := Yourdataset.FindField(Yourdataset.FieldDefs[i].Name ); if Not Assigned(TmpField) then begin TmpField := Yourdataset.FieldDefs[i].CreateField(Yourdataset.Owner); TmpField.Name := YourDataset.Name Yourdataset.FieldDefs[i].Name; end; end; end;2.Free 部份 procedure BoClearAllTFields (YourDataSet: TDataSet); begin while (YourDataSet.FieldCount <> 0) do YourDataSet.Fields[0].Free; end;-- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw) |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 1.Create 部份hagar兄, 我試了你的方法, 仍然會發生同樣的情況, 我再看了一下我寫的內容, 有幾個地方可能描述不明, 我再加強一下 Query有十個欄位已建立好的, 其中四個要定義在 Fields Editor中(如前述) 而這四個Field是由一個ini檔設定中讀入, 也就是在ini定義中可以任意挑選 至多十個欄位加入(也可以至少一個), 不知hagar兄是否知道還有其他解決之道? 謝謝!procedure BoAutoCreateTFields( Yourdataset : TDataSet ); var TmpField: TField; i: Integer; begin Yourdataset.Fielddefs.Update; for i:= 0 to Pred(YourDataset.FieldDefs.Count) do begin TmpField := Yourdataset.FindField(Yourdataset.FieldDefs[i].Name ); if Not Assigned(TmpField) then begin TmpField := Yourdataset.FieldDefs[i].CreateField(Yourdataset.Owner); TmpField.Name := YourDataset.Name Yourdataset.FieldDefs[i].Name; end; end; end;2.Free 部份procedure BoClearAllTFields (YourDataSet: TDataSet); begin while (YourDataSet.FieldCount <> 0) do YourDataSet.Fields[0].Free; end;-- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw) |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |