InterBase 建立Table一問 |
尚未結案
|
joe_ung
一般會員 發表:12 回覆:21 積分:6 註冊:2003-10-16 發送簡訊給我 |
|
alice
初階會員 發表:41 回覆:49 積分:28 註冊:2002-04-30 發送簡訊給我 |
|
joe_ung
一般會員 發表:12 回覆:21 積分:6 註冊:2003-10-16 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 先多謝你啊!! 另外,怎樣在一個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 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 我並不是想在動態的情況下做增加Field這動作啊!! 我只是想在靜態情況下增加一個Field,因為我之前忘記了說明啊!! < >< >這我可有點不解了, 一般而言, 不透過各種工具而以程式來異動欄位, 我的認知中都是屬於動態異動! 不知joe_ung意欲為何? 我的經驗, 除非你是整個table 都由程式來建立, 否則以程式來對IB欄位做異動(如變更長度, 名稱, 刪除欄位, 新增欄位), 其實真的很容易使IB檔出問題, 這點不論是動態以程式做還是外部工具做都是一樣的, 以上是我個人的遭遇過的經驗, 提供你參考 |
joe_ung
一般會員 發表:12 回覆:21 積分:6 註冊:2003-10-16 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 對不起,我之前沒有說明我的情況. 我在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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |