ADOQuery如何新增欄位 |
缺席
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
請問ADOQuery已經建立一張資料表後,是否可以再新增欄位
以下為我寫的Code 但會出現錯誤 [BCC32 Error] ZPrint.cpp(89): E2247 'TCustomADODataSet::FieldDefs' is not accessible [code cpp] ADOQuery1->FieldDefs->Add("公司名稱" , ftString, 30, false); ADOQuery1->FieldDefs->Add("郵遞區號" , ftString, 30, false); ADOQuery1->FieldDefs->Add("營業地址" , ftString, 30, false); ADOQuery1->FieldDefs->Add("公司電話" , ftString, 30, false); ADOQuery1->FieldDefs->Add("公司傳真" , ftString, 30, false); ADOQuery1->FieldByName("公司名稱")->AsString = "公司名稱"; ADOQuery1->FieldByName("郵遞區號")->AsString = "郵遞區號"; ADOQuery1->FieldByName("營業地址")->AsString = "營業地址"; ADOQuery1->FieldByName("公司電話")->AsString = "公司電話"; ADOQuery1->FieldByName("公司傳真")->AsString = "公司傳真"; [/code] |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
你好
裡面有提到 新增欄位的方式是(SQL): alter table 資料表 add 欄位名 資料型態(資料多大) 此方式是利用SQL指令新增的 但我ADOQuery已經下過SQL的指令了 我想在已建立好的資料裡面再新增欄位,但我實際資料庫裡面的資料表是不需要新增這個欄位的 我只要在ADOQuery裡面再新增欄位,不知道這樣是否能做到 ===================引 用 老大仔 文 章=================== http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=98182 參考一下~ |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
不太懂你的問題
有沒有一個實際的範例呢? ===================引 用 doriscat 文 章=================== 你好 裡面有提到 新增欄位的方式是(SQL): alter table 資料表 add 欄位名 資料型態(資料多大) 此方式是利用SQL指令新增的 但我ADOQuery已經下過SQL的指令了 我想在已建立好的資料裡面再新增欄位,但我實際資料庫裡面的資料表是不需要新增這個欄位的 我只要在ADOQuery裡面再新增欄位,不知道這樣是否能做到 ===================引 用 老大仔 文 章=================== http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=98182 參考一下~ |
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
你好
ADOQuery1->SQL="select * from 產品資料 where 品號='5678'"; ADOQuery1->Open(); 此部分的SQL指令做完後 我想在ADOQuery1裡面再新增一些欄位,如[公司名稱],這裡面的資料我自己會再寫入值進去 新增的欄位是原本[產品資料]裡面所沒有的欄位 假設[產品資料]裡有 品名,品號,價格 但我在ADOQuery1後來要再新增[公司名稱]這個欄位 所以最後我能夠在ADOQuery1裡面取得[品名][品號][價格][公司名稱]這四個欄位的資料 |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
你好
ADOQuery1->SQL="select * from 產品資料 where 品號='5678'"; 有什麼方式可以不需要修改到上面這一行的字串嗎? 因為 "select * from 產品資料 where 品號='5678'" 這部分是利用程式自動產生的 所以想要能在這個指令下完後,可以在ADOQuery1裡面新增欄位, 不知道是否ADOQuery1可以這樣做 還是只能利用SQL的指令產生欄位 ===================引 用 老大仔 文 章=================== 照您這樣說的話 那應該只是為了要讓使用者看 但並不會實際寫回資料庫 那請改成以下試試: [code sql] Select 產品資料.*, 公司名稱 as A from 產品資料 where 品號='5678' [/code] |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
「select *」是無法增加自定欄位的
你可以先寫好卻顯示的欄位,如「select 品號, 產品名稱…」等 等要增加自定欄位時可在ADOQuery之前手動修改ADOQuery->SQL的內容。 ===================引 用 doriscat 文 章=================== 你好 ADOQuery1->SQL="select * from 產品資料 where 品號='5678'"; 有什麼方式可以不需要修改到上面這一行的字串嗎? 因為 "select * from 產品資料 where 品號='5678'" 這部分是利用程式自動產生的 所以想要能在這個指令下完後,可以在ADOQuery1裡面新增欄位, 不知道是否ADOQuery1可以這樣做 還是只能利用SQL的指令產生欄位 ===================引 用 老大仔 文 章=================== 照您這樣說的話 那應該只是為了要讓使用者看 但並不會實際寫回資料庫 那請改成以下試試: [code sql] Select 產品資料.*, 公司名稱 as A from 產品資料 where 品號='5678' [/code] |
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
你好
所以ADOQuery這個物件沒辦法達到我想要做到的功能 因為要在ADOQuery裡面產生欄位就必需透過SQL語法與資料表的設定才能產生欄位 而我要的作法是利用ADOQuery->SQL已產生好的資料表 然後在ADOQuery再新增欄位 看來似乎無法達成 還是謝謝各位的回覆 ===================引 用 GrandRURU 文 章=================== 可以啊,直接從db修改table增加欄位就可以達成你要的結果了 ===================引 用 doriscat 文 章=================== 你好 有什麼方式可以不需要修改ADOQuery->SQL的內容 就能新增欄位嗎? 不知道ADOQuery是否能達到這個功能 |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
應該還是可以的
以下: [code delphi] procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.SQL.Add('Select 品號 from 產品資料 '); ADOQuery1.Open; end; procedure TForm1.Button3Click(Sender: TObject); var i, j : Integer; begin j := ADOQuery1.RecordCount; ADODataSet1.Close; ADODataSet1.CommandText:='Select 品號 * from 產品資料 '; ADODataSet1.FieldDefs.Add('公司名稱', ftString, 30, False); ADODataSet1.CreateDataSet; ADOQuery1.First; for i := 0 to j-1 do begin ADODataSet1.Append; ADODataSet1.FieldByName('品號').AsString := ADOQuery1.FieldByName('品號').AsString;//'xx'; ADODataSet1.FieldByName('公司名稱').AsString := 'AAA' ADOQuery1.Next; end; ADODataSet1.Prepared; ADODataSet1.Open; end; [/code] 供參考~ 經測試下是ok的唷~ PS:不好意思~我只會Delphi 所以可能要請您自行轉換成C 了 不過~ 以上的用法在轉換成C 應該是還ok 因為感覺上最多只差在變數的宣告 以及把"."轉換成"->"而已吧@@ (應該...)
編輯記錄
老大仔 重新編輯於 2009-11-03 09:10:47, 註解 無‧
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
你好
我是用FastReport裡面的元件 frxDBDataset 可能是試用版的關係我只能使用到兩個frxDBDataset 報表在讀取第3個frxDBDataset1時就會出現錯誤訊息 Error in expression 'frxDBDataset3."公司名稱"': Identifier expected 所以我才想把原本ADOQuery3裡面所用到的欄位新增到ADOQuery1裡面 我有試過下列方式,但frxDBDataset3裡面沒有FieldDefs這個選項 還是謝謝老大仔提供的方法 ===================引 用 老大仔 文 章=================== 應該還是可以的 以下: [code delphi] procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.SQL.Add('Select 品號 from 產品資料 '); ADOQuery1.Open; end; procedure TForm1.Button3Click(Sender: TObject); var i, j : Integer; begin j := ADOQuery1.RecordCount; ADODataSet1.Close; ADODataSet1.CommandText:='Select 品號 * from 產品資料 '; ADODataSet1.FieldDefs.Add('公司名稱', ftString, 30, False); ADODataSet1.CreateDataSet; ADOQuery1.First; for i := 0 to j-1 do begin ADODataSet1.Append; ADODataSet1.FieldByName('品號').AsString := ADOQuery1.FieldByName('品號').AsString;//'xx'; ADODataSet1.FieldByName('公司名稱').AsString := 'AAA' ADOQuery1.Next; end; ADODataSet1.Prepared; ADODataSet1.Open; end; [/code] |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
|
doriscat
一般會員 發表:4 回覆:10 積分:2 註冊:2003-11-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |