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

如何以程式碼定義 field

答題得分者是:hagar
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-09 21:37:24 IP:61.66.xxx.xxx 未訂閱
請問各位!    我有一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-10 07:37:13 IP:202.39.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-10 22:16:46 IP:61.66.xxx.xxx 未訂閱
引言: 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)
hagar兄, 我試了你的方法, 仍然會發生同樣的情況, 我再看了一下我寫的內容, 有幾個地方可能描述不明, 我再加強一下 Query有十個欄位已建立好的, 其中四個要定義在 Fields Editor中(如前述) 而這四個Field是由一個ini檔設定中讀入, 也就是在ini定義中可以任意挑選 至多十個欄位加入(也可以至少一個), 不知hagar兄是否知道還有其他解決之道? 謝謝!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-11 08:12:28 IP:202.39.xxx.xxx 未訂閱
參考: http://bdn.borland.com/article/0,1410,16467,00.html -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw)
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-11 23:27:57 IP:61.66.xxx.xxx 未訂閱
引言: 參考: http://bdn.borland.com/article/0,1410,16467,00.html -- 將進酒 杯莫停 與君歌一曲 請君為我傾耳聽 (hagar@gcn.net.tw)
感謝hagar兄提供資料, 由於該文十分長, 我要花點時間研究一下, 有結果的話再向各位報告!
系統時間:2024-04-29 10:32:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!