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

ADOQuery如何新增欄位

缺席
doriscat
一般會員


發表:4
回覆:10
積分:2
註冊:2003-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-30 00:23:38 IP:219.69.xxx.xxx 訂閱
請問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]

老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-30 09:00:57 IP:59.120.xxx.xxx 未訂閱
為何不直接以SQL來增加一個欄位呢?
編輯記錄
老大仔 重新編輯於 2009-10-30 09:01:32, 註解 無‧
doriscat
一般會員


發表:4
回覆:10
積分:2
註冊:2003-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-30 09:11:44 IP:59.127.xxx.xxx 訂閱
因為SQL是寫程式碼產生的
所以沒辦法直接利用SQL直接新增攔位
或是可以在檢視表建立之後再用SQL來新增欄位,因為這個部分我不了解
所以想說能不能在元件內直接新增欄位
===================引 用 老大仔 文 章===================
為何不直接以SQL來增加一個欄位呢?

老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-30 16:34:19 IP:59.120.xxx.xxx 未訂閱
doriscat
一般會員


發表:4
回覆:10
積分:2
註冊:2003-11-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-10-31 23:11:29 IP:219.69.xxx.xxx 訂閱
你好
裡面有提到
新增欄位的方式是(SQL):
alter table 資料表 add 欄位名 資料型態(資料多大)
此方式是利用SQL指令新增的
但我ADOQuery已經下過SQL的指令了
我想在已建立好的資料裡面再新增欄位,但我實際資料庫裡面的資料表是不需要新增這個欄位的
我只要在ADOQuery裡面再新增欄位,不知道這樣是否能做到

===================引 用 老大仔 文 章===================
http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=98182
參考一下~
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-11-01 02:58:44 IP:118.167.xxx.xxx 未訂閱
不太懂你的問題
有沒有一個實際的範例呢?

===================引 用 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-11-01 11:46:28 IP:219.69.xxx.xxx 訂閱
你好
ADOQuery1->SQL="select * from 產品資料 where 品號='5678'";
ADOQuery1->Open();
此部分的SQL指令做完後
我想在ADOQuery1裡面再新增一些欄位,如[公司名稱],這裡面的資料我自己會再寫入值進去
新增的欄位是原本[產品資料]裡面所沒有的欄位
假設[產品資料]裡有
品名,品號,價格
但我在ADOQuery1後來要再新增[公司名稱]這個欄位
所以最後我能夠在ADOQuery1裡面取得[品名][品號][價格][公司名稱]這四個欄位的資料

老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-11-01 20:01:12 IP:59.114.xxx.xxx 未訂閱
照您這樣說的話
那應該只是為了要讓使用者看
但並不會實際寫回資料庫
那請改成以下試試:

[code sql]
Select 產品資料.*, 公司名稱 as A from 產品資料 where 品號='5678'
[/code]

doriscat
一般會員


發表:4
回覆:10
積分:2
註冊:2003-11-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-11-01 21:38:54 IP:219.69.xxx.xxx 訂閱
你好
ADOQuery1->SQL="select * from 產品資料 where 品號='5678'";
有什麼方式可以不需要修改到上面這一行的字串嗎?
因為 "select * from 產品資料 where 品號='5678'" 這部分是利用程式自動產生的
所以想要能在這個指令下完後,可以在ADOQuery1裡面新增欄位,
不知道是否ADOQuery1可以這樣做
還是只能利用SQL的指令產生欄位

===================引 用 老大仔 文 章===================
照您這樣說的話
那應該只是為了要讓使用者看
但並不會實際寫回資料庫
那請改成以下試試:

[code sql]
Select 產品資料.*, 公司名稱 as A from 產品資料 where 品號='5678'
[/code]


GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-11-02 13:27:14 IP:203.75.xxx.xxx 未訂閱
「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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-11-02 14:22:11 IP:59.127.xxx.xxx 訂閱

你好
有什麼方式可以不需要修改ADOQuery->SQL的內容
就能新增欄位嗎?
不知道ADOQuery是否能達到這個功能
===================引 用 GrandRURU 文 章===================
「select *」是無法增加自定欄位的
你可以先寫好卻顯示的欄位,如「select 品號, 產品名稱…」等

等要增加自定欄位時可在ADOQuery之前手動修改ADOQuery->SQL的內容。


GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-11-02 14:37:09 IP:203.75.xxx.xxx 未訂閱
可以啊,直接從db修改table增加欄位就可以達成你要的結果了

===================引 用 doriscat 文 章===================

你好
有什麼方式可以不需要修改ADOQuery->SQL的內容
就能新增欄位嗎?
不知道ADOQuery是否能達到這個功能
doriscat
一般會員


發表:4
回覆:10
積分:2
註冊:2003-11-07

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-11-02 16:31:18 IP:59.127.xxx.xxx 訂閱
你好
所以ADOQuery這個物件沒辦法達到我想要做到的功能
因為要在ADOQuery裡面產生欄位就必需透過SQL語法與資料表的設定才能產生欄位
而我要的作法是利用ADOQuery->SQL已產生好的資料表
然後在ADOQuery再新增欄位
看來似乎無法達成
還是謝謝各位的回覆
===================引 用 GrandRURU 文 章===================
可以啊,直接從db修改table增加欄位就可以達成你要的結果了

===================引 用 doriscat 文 章===================


你好
有什麼方式可以不需要修改ADOQuery->SQL的內容
就能新增欄位嗎?
不知道ADOQuery是否能達到這個功能
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-11-03 09:06:44 IP:59.120.xxx.xxx 未訂閱
應該還是可以的
以下:


[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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-11-03 20:22:57 IP:219.69.xxx.xxx 訂閱
你好
我是用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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-11-03 20:57:10 IP:122.116.xxx.xxx 未訂閱
您好,

用 adoquery 的 calculated field 如何?
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
doriscat
一般會員


發表:4
回覆:10
積分:2
註冊:2003-11-07

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-11-04 00:39:28 IP:219.69.xxx.xxx 訂閱
你好
不知此種方式有詳細說明嗎?

===================引 用 st33chen 文 章===================
您好,

用 adoquery 的 calculated field 如何?
系統時間:2017-10-24 1:09:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!