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

InterBase 建立Table一問

尚未結案
joe_ung
一般會員


發表:12
回覆:21
積分:6
註冊:2003-10-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-04 15:29:28 IP:202.175.xxx.xxx 未訂閱
本人想請教一下: 1. VARCHAR 與 CHAR 有何不同? 2. 我想在Table內建立一個item叫作編號,我想把它設定為整數型態,而且是自動順序的,有何方法呢? 希望各位大大可以指導一下小弟
alice
初階會員


發表:41
回覆:49
積分:28
註冊:2002-04-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-05 10:37:26 IP:211.75.xxx.xxx 未訂閱
CHAR 是固定長度的資料型態,VARCHAR是不固定長度, 如身分字證是固定長度,就可使用CHAR, 若姓名,地址不是固定長度的就 使用VARCHAR. 若定義 A CHAR(3) , B VARCHAR(3), 資料皆存入'AB', SELECT...WHERE A='AB' 則SELECT不到任何資料, 除非 A='AB ',要補滿長度3, 若SELECT..WHERE B='AB' 則可SELECT到資料,這就兩者的差別. 
joe_ung
一般會員


發表:12
回覆:21
積分:6
註冊:2003-10-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-05 11:40:59 IP:202.175.xxx.xxx 未訂閱
先多謝你啊!! 另外,怎樣在一個Table內增加一個item(field)呢?
P.D.
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-05 13:02:27 IP:61.71.xxx.xxx 未訂閱
引言: 先多謝你啊!! 另外,怎樣在一個Table內增加一個item(field)呢?
按此看來, 你應該是剛使用interbase沒多久哦! 我補充一下 a char(10) b varchar(10) a:= 'ab' b:= 'ab' 但實際存入到ib內時, a='ab^^^^^^^^' ^ 表空白 b='ab' 使用 varchar 可以節省不少的儲存空間, 但會多花一些時間來解譯字串, 因為系統要計算 b實際儲存長度, 不過現在的電腦效率關於這個問題已經不是問題了! 另外, 你要動態變更ib的 field stru, 我並不建議你這樣做, 很容易招至ib檔出問題(ib檔其實很穩定, 只要你不要時常去變更欄位結構), 如果你是要建立一個可以自動編號的欄位, ib並沒有提供一個autofield 特性, 但可以透過storeprocedure 或 generator 功能來達成, 建議你下載 firebird 1.5版, 在做這項功能時簡單很多, 我一時間也無法說清楚, 提供你在 ibconsole中如何去建立這樣的功能 進入 ibconsole 或其他 ib 的工具, 如 ems quickdesk, ib_sql... 1.建立一個 table , 其中請加入一個欄位
CREATE TABLE D2004
(
  NETMARK       CHAR(1),
  PARTCODE      VARCHAR(20),
  PICT1         BLOB,
  CREATEDATE    VARCHAR(10),
  CREATETIME    VARCHAR(10),
  MODIFYDATE    VARCHAR(10),
  MODIFYTIME    VARCHAR(10),
  IBCODE        NUMERIC(10,0) NOT NULL,   --> 請加入這個欄位
 PRIMARY KEY (IBCODE)
);    2.建立一個storeprocedure (D2004Insert, 名稱可自定)
create procedure D2004Insert returns (nIBCODE integer)
as begin
  nIBCODE = GEN_ID(D2004_Gen,1);
end    3.建立一個Generatoir (D2004_Gen, 名稱可自定)
建立generator 的目的在使 interbase 觸發insert, delete, edit 時可以被自動呼叫storeprocedure
create generator D2004_Gen    4.讓序號歸零
set generator D2004_Gen to 0    
這樣就完成一個叫 IBCODE 的欄位可以由INTERBASE自動給號 再來就是要在程式中啟動這個STOREPROCEDURE, 但因為版本不同, 所以coding方式都不同, 僅就 Firebird 1.5來說, 很簡單 在 IBquery中有一項 properity [GeneratortoField], 只要進入指定設定的 D2004_Gen 及 IBCODE 以及要執行的觸發行為後即可 試試看, 要以文字說明不太容易, 有問題再POST上來
joe_ung
一般會員


發表:12
回覆:21
積分:6
註冊:2003-10-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-07 11:47:36 IP:202.175.xxx.xxx 未訂閱
我並不是想在動態的情況下做增加Field這動作啊!! 我只是想在靜態情況下增加一個Field,因為我之前忘記了說明啊!! < >< >
P.D.
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-08 02:57:42 IP:61.71.xxx.xxx 未訂閱
引言: 我並不是想在動態的情況下做增加Field這動作啊!! 我只是想在靜態情況下增加一個Field,因為我之前忘記了說明啊!! < >< >
這我可有點不解了, 一般而言, 不透過各種工具而以程式來異動欄位, 我的認知中都是屬於動態異動! 不知joe_ung意欲為何? 我的經驗, 除非你是整個table 都由程式來建立, 否則以程式來對IB欄位做異動(如變更長度, 名稱, 刪除欄位, 新增欄位), 其實真的很容易使IB檔出問題, 這點不論是動態以程式做還是外部工具做都是一樣的, 以上是我個人的遭遇過的經驗, 提供你參考
joe_ung
一般會員


發表:12
回覆:21
積分:6
註冊:2003-10-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-10 11:57:24 IP:202.175.xxx.xxx 未訂閱
對不起,我之前沒有說明我的情況. 我在InterBase內建立了一個table,但後來才發現我漏加一個Field,所以才要用補加一個Field啊!! 希望各位可以幫幫忙.......多謝!
P.D.
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-11 16:37:20 IP:61.71.xxx.xxx 未訂閱
引言: 對不起,我之前沒有說明我的情況. 我在InterBase內建立了一個table,但後來才發現我漏加一個Field,所以才要用補加一個Field啊!! 希望各位可以幫幫忙.......多謝!
還是那句話, 如果只是要變更一次的話, 建立用 IB 的各種工具來執行, 而且不要異動太多次, 否則這個TABLE可能不保, 我已經遇到過了(可花了我一個月才查到原因), 以下是如何異動欄位的用法 拉一個 IBdatabase, IBtransaction, IBSQL IBdatabase 請取消 loginprompt, 及請連好IBdatabase的connection 再如下寫在一個button中 IBDatabase1.Connected:=True; sql:= 'alter table TEST add aa3 varchar(10)'; IBSQL1.SQL.Text:= sql; IBTransaction1.StartTransaction; IBSQL1.ExecQuery;
joe_ung
一般會員


發表:12
回覆:21
積分:6
註冊:2003-10-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-12 21:41:52 IP:202.175.xxx.xxx 未訂閱
Thank you so much I can solve the problem now thanks
系統時間:2024-05-10 2:13:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!