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

欄位包含可複選的資料時,欄位該如何設計

尚未結案
bugy
一般會員


發表:4
回覆:8
積分:2
註冊:2003-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-02 21:54:20 IP:219.68.xxx.xxx 未訂閱
請問各位,在設計 Schema 時,如果有一個欄位包含了可複選的資料時,這個欄位該如何設計呢? 舉個例子好了,比如說有一個欄位是設定用來儲存使用者常用的程式語言, 可選的項目如下(可複選): 1.Delphi 2.Java 3.Basic 4.PHP 5.C 6.C 7.C# 8.其他 在單選的情況下可以用 LookupField 來做, 想請問的是,在複選時, 1.這個欄位的 Schema 要怎麼設計呢? 2.有什麼 DBControls 適合編輯這種型式的欄位呢? 發表人 - bugy 於 2005/07/02 21:56:53
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-02 22:14:50 IP:211.75.xxx.xxx 未訂閱
方法一: 依選項數目,開多個Boolean欄位來記錄。當然若是這樣,就可以用一般的DBCheckBox控件即可。 方法二: 用一Integer欄位來記錄所有複選的資料,將所有的選項編碼依序為2的n次方,如1,2,4,8,16,32,64,128....依序,如下範例: 1.Delphi (1) 2.Java (2) 3.Basic (4) 4.PHP (8) 5.C (16) 6.C (32) 7.C# (64) 8.其他 (128) 若複選的項目為1,2,4則儲存值為1 2 8=11,若要判別儲存值是否包含某個項目,則用and運算,如(11 and 8)=8,即表示包含了項目4。如果是以這種方式儲存,則Control的值則需自行處理。
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-03 02:53:54 IP:221.169.xxx.xxx 未訂閱
bugy:可以考慮以二進位處理,
1.Delphi (選:1)
2.Java   (選:1)
3.Basic  (不選:0)
4.PHP    (不選:0)
5.C      (選:1)
6.C      (不選:0)
7.C#     (不選:0)
8.其他   (選:1)
文字型二進位表示為11001001假設存入Edit2->Text
很抱歉我以BCB表示
  int l=Edit2->Text.Length();
  int temp=0,x,r=0;
  for (int i=l;i>0;i--) {
    x=StrToIntDef(Edit2->Text[i],0);
    temp=temp (x*Power(2, r)); // Power要USE Math
    r  ;
  }
  temp; // 十進位為201
  
  反解只要十進位轉二進位即可
  int n,a[100];
  for (n=0 ; temp>0 ; n  )  // temp是剛剛的201
  {
    a[n] = temp % 2 ;
    temp = temp / 2 ;
  }
  Edit2->Text ="";
  for (int i=n-1 ; i>=0 ; i--)
    Edit2->Text = Edit2->Text   a[i] ;
只要一個整數型欄位就可以存放此類資料!
請參考!
Andy Chang
------
Andy Chang
bugy
一般會員


發表:4
回覆:8
積分:2
註冊:2003-01-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-03 03:20:39 IP:219.68.xxx.xxx 未訂閱
首先感謝 jeff377, Andy Chang 的回答。 使用2進位表示來儲存每個選項的做法我也曾經考慮過,不過這種方法只適用在選項的數目少的時候,是嗎? 如果我有很多的選項,或是選項會經常修改情況下, 使用 integer 似乎不夠,那還有什麼其他方法呢?
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-03 18:06:08 IP:221.169.xxx.xxx 未訂閱
引言: 首先感謝 jeff377, Andy Chang 的回答。 使用2進位表示來儲存每個選項的做法我也曾經考慮過,不過這種方法只適用在選項的數目少的時候,是嗎? 如果我有很多的選項,或是選項會經常修改情況下, 使用 integer 似乎不夠,那還有什麼其他方法呢?
是的!約30個選項,但寫程式就是去挑戰這些!如果考慮以文字存在再進行分 解或以整數分批存入,或我在DOS時代以Char(254)中只01000010001方式存檔 也可以存放254個判斷。 請參考! Andy Chang
------
Andy Chang
系統時間:2024-11-23 9:38:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!