如何只顯示單一欄位的值,並新增此欄位到一張新的table? |
答題得分者是:herbert2
|
leien
一般會員 發表:3 回覆:5 積分:1 註冊:2008-10-27 發送簡訊給我 |
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
只顯示我篩選的那一欄的資料:
SELECT ID FROM 則 DBGrid1 便只會有 ID 一個欄位. DBGrid1->DataSource = DataSource1 DataSource1->DataSet = Query1 (或 Table1) Query1->SQL = "SELECT ....." 句 可以將此篩選結果新增這一欄位到DBGrid2: 要新增至另一個 Table 並不須要經過 TDBGrid, 直接用 SQL 指令便可解決. 例如: INSERT INTO SELECT ID FROM TDBGrid 是個 Display Data 與 Edit 的人機界面元件, 它不是 Table, 故不可以新增、修改、刪除. 新增、修改、刪除的對象是 TDataSet (TQuery 或 TTable 等) 而非 TDBGrid. ===================引 用 leien 文 章=================== 請問大家該如何從一張table中 篩選出我要的範圍,並且只顯示我篩選的那一欄的資料? 如欄位 ID 我篩選條件為 100 < ID <1000 則將ID這一欄的結果輸出到DBGrid上 並且我想用一個按鈕 insert 可以將此篩選結果新增這一欄位到DBGrid2 按鈕的部份我會,想請教大家,在只顯示單一欄位及新增欄位到新table中的寫法該怎麼寫..
編輯記錄
herbert2 重新編輯於 2008-11-03 00:03:45, 註解 無‧
|
leien
一般會員 發表:3 回覆:5 積分:1 註冊:2008-10-27 發送簡訊給我 |
謝謝你的回答,經由測試後已經成功顯示一個欄位,
但在插入的部份有問題 我想要將篩選出的這一個欄位資料 插入到一個新的table中(但我需要動態的建立這張table,因為這只是我暫存篩選結果用的table,我希望程式關掉後此table就消失) 而這張table可以不斷的被插入篩選後的單一欄位資料.即當第二次插入時,第一次所插入的欄位仍在,第二次所插入的欄位 會顯示在第二欄上, 以下是我的程式碼,這一段是只測試插入的部份,尚未做到不斷插入 SQLQuery2->Close(); SQLQuery2->SQL->Clear(); SQLQuery2->SQL->Add("INSERT INTO SELECT pk FROM WHERE pk BETWEEN 80 AND 82"); SQLQuery2->Prepared; SQLQuery2->Open(); // Query1->Active=true; DataSetProvider2->Constraints= true; ClientDataSet2->Active = false; ClientDataSet2->Active = true; DataSource2->AutoEdit = true ; 上面的程式碼compile出來會有語法的錯誤,pk是此欄位的名稱 若改指定table的話一樣會錯,如下: SQLQuery2->SQL->Add("INSERT INTO SELECT pk FROM tableName WHERE pk BETWEEN 80 AND 82"); 不知道該怎麼處理呢? 另外我有個問題是,若我想從query1所對應的DBGrid1所篩選出的資料中, 挑出單一欄位insert到query2,並顯示在DBGrid2,那我該怎麼寫呢? 目前是連插入的寫法都還未成功. 以下是另一個寫法,一樣有錯 //建立一個新table SQLQuery2->SQL->Add("create table temp(pk)"); //將table2所篩選出的單一欄位資料插入到temp table SQLQuery2->SQL->Add("insert into temp(pk) select pk from table2 where pk between 80 AND 82"); //顯示temp table到DBGrid2上 SQLQuery2->SQL->Add("select * from temp where pk between 80 AND 82"); 都是錯在insert的那一行指令,不知道哪裡有錯 ===================引 用 herbert2 文 章=================== 只顯示我篩選的那一欄的資料: SELECT ID FROM (即 101 <= ID <= 999) 則 DBGrid1 便只會有 ID 一個欄位. DBGrid1->DataSource = DataSource1 DataSource1->DataSet = Query1 (或 Table1) Query1->SQL = "SELECT ....." 句 可以將此篩選結果新增這一欄位到DBGrid2: 要新增至另一個 Table 並不須要經過 TDBGrid, 直接用 SQL 指令便可解決. 例如: INSERT INTO SELECT ID FROM TDBGrid 是個 Display Data 與 Edit 的人機界面元件, 它不是 Table, 故不可以新增、修改、刪除. 新增、修改、刪除的對象是 TDataSet (TQuery 或 TTable 等) 而非 TDBGrid. |
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
Hi:您用什麼資料庫?
===================引 用 leien 文 章=================== 謝謝你的回答,經由測試後已經成功顯示一個欄位, 但在插入的部份有問題 我想要將篩選出的這一個欄位資料 插入到一個新的table中(但我需要動態的建立這張table,因為這只是我暫存篩選結果用的table,我希望程式關掉後此table就消失) 而這張table可以不斷的被插入篩選後的單一欄位資料.即當第二次插入時,第一次所插入的欄位仍在,第二次所插入的欄位 會顯示在第二欄上, 以下是我的程式碼,這一段是只測試插入的部份,尚未做到不斷插入 . . .
------
What do we live for if not to make life less difficult for each other? |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
Sorry! 補更正 SQL 指令被 KTop 編輯器隱藏掉的要您自行指定的 <TableName>.
INSERT INTO <TableName_Temp> SELECT ID FROM <TableName_Active> <TableName_Temp> 須已存在, 您才可以填入資料. 各資料庫開臨時檔的作法不同, 您提供的資訊不足, 暫無法回答! 再次提醒您, DBGrid 只是『顯示與編輯資料的人機介面』, 不是 DataSet, 您永遠不能夠對 DBGrid 篩選資料, 而是要由 Query 從 Server 的 Table 篩選資料. 要把資料錄顯示在 DBGrid2, 就要把資料錄 SELECT 進 DBGrid2 資料來源的 Query2. ===================引 用 leien 文 章=================== 另外我有個問題是,若我想從query1所對應的DBGrid1所篩選出的資料中, 挑出單一欄位insert到query2,並顯示在DBGrid2,那我該怎麼寫呢? 以下是另一個寫法,一樣有錯 //建立一個新table SQLQuery2->SQL->Add("create table temp(pk)"); //將table2所篩選出的單一欄位資料插入到temp table SQLQuery2->SQL->Add("insert into temp(pk) select pk from table2 where pk between 80 AND 82"); //顯示temp table到DBGrid2上 SQLQuery2->SQL->Add("select * from temp where pk between 80 AND 82"); 都是錯在insert的那一行指令,不知道哪裡有錯 |
leien
一般會員 發表:3 回覆:5 積分:1 註冊:2008-10-27 發送簡訊給我 |
你好 :
我的資料庫是MySQL 5.0 而BCB是6.0 ===================引 用 christie 文 章=================== Hi:您用什麼資料庫? ===================引 用 leien 文 章=================== 謝謝你的回答,經由測試後已經成功顯示一個欄位, 但在插入的部份有問題 我想要將篩選出的這一個欄位資料 插入到一個新的table中(但我需要動態的建立這張table,因為這只是我暫存篩選結果用的table,我希望程式關掉後此table就消失) 而這張table可以不斷的被插入篩選後的單一欄位資料.即當第二次插入時,第一次所插入的欄位仍在,第二次所插入的欄位 會顯示在第二欄上, 以下是我的程式碼,這一段是只測試插入的部份,尚未做到不斷插入 . . . |
leien
一般會員 發表:3 回覆:5 積分:1 註冊:2008-10-27 發送簡訊給我 |
謝謝你再次解答,關於您強調的 " DBGrid 只是『顯示與編輯資料的人機介面』"
這一個概念的確讓我有豁然開朗的感覺, 如我所說,我的確需要開臨時table來用,不知道您需要我提供什麼樣的資訊呢? 我晚上才能再回覆! ===================引 用 herbert2 文 章=================== Sorry! 補更正 SQL 指令被 KTop 編輯器隱藏掉的要您自行指定的 <TableName>. INSERT INTO <TableName_Temp> SELECT ID FROM <TableName_Active> <TableName_Temp> 須已存在, 您才可以填入資料. 各資料庫開臨時檔的作法不同, 您提供的資訊不足, 暫無法回答! 再次提醒您, DBGrid 只是『顯示與編輯資料的人機介面』, 不是 DataSet, 您永遠不能夠對 DBGrid 篩選資料, 而是要由 Query 從 Server 的 Table 篩選資料. 要把資料錄顯示在 DBGrid2, 就要把資料錄 SELECT 進 DBGrid2 資料來源的 Query2. ===================引 用 leien 文 章=================== 另外我有個問題是,若我想從query1所對應的DBGrid1所篩選出的資料中, 挑出單一欄位insert到query2,並顯示在DBGrid2,那我該怎麼寫呢? 以下是另一個寫法,一樣有錯 //建立一個新table SQLQuery2->SQL->Add("create table temp(pk)"); //將table2所篩選出的單一欄位資料插入到temp table SQLQuery2->SQL->Add("insert into temp(pk) select pk from table2 where pk between 80 AND 82"); //顯示temp table到DBGrid2上 SQLQuery2->SQL->Add("select * from temp where pk between 80 AND 82"); 都是錯在insert的那一行指令,不知道哪裡有錯 |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
|
leien
一般會員 發表:3 回覆:5 積分:1 註冊:2008-10-27 發送簡訊給我 |
嗯..目前我的想法也是這樣,等我實際測試後看看
===================引 用 herbert2 文 章=================== 據小弟的瞭解, MySQL 5.0 並無您想要的 Temp Table (Oracle 則有, 但也要先 Create). 解決方法: (1) Create Temp Table (要自行訂好規則, 以避免多人使用時的衝突). (2) Run your action. (3) Close Query (Temp Table) (4) Drop Temp Table. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |