有關查詢資料庫的問題 |
答題得分者是:P.D.
|
like760416
一般會員 發表:2 回覆:5 積分:1 註冊:2008-04-11 發送簡訊給我 |
各位大大~~
現在我遇到一個問題,就是我做了一個主系統且是跟資料庫有連結的,上面有新增刪除查詢...的鍵,而查詢鍵一按,就會跳出另一個form是用來輸入查詢的條件,當查詢的條件輸入好後,按確定就會把剛剛要查詢的資料顯示在主系統上,請問一下這要如何把值傳回去,且可以抓到那個條件值? 而我寫的程式碼是 if edit2.text<>'' then begin form1.adoQuery1.Close; form1.adoQuery1.SQL.Clear; form1.adoQuery1.SQL.Add('Select * from 廠牌 where brand="' edit2.text '"'); form1.adoQuery1.Open; form1.dbedit31.text := form1.adoquery1.FieldByName('b_id').AsString; form1.dbedit32.text := form1.adoquery1.FieldByName('brand').AsString; form9.Close; end else showmessage('請輸入廠牌名稱'); ......form1裡面有dbgrid和dbedit,它們是互相有關聯的。而form9是放查詢的條件。 而我所寫的程式 它只會改變上面的dbedit,而dbgrid它卻不會指向那一筆資料= = , 不知是哪裡錯了= = ,書上都沒寫>"<。 可以幫我解答一下嗎?? 感謝~~~ 編輯記錄
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
程式裡犯了兩個嚴重的錯誤(非設計上, 是觀念上)
1.顯示, 由資料中你應該是兩個Query, 一個是AdoQuery1, 另一個是關連dbedit31, dbedit32的Query2(不知名稱, 在程式中看不到) 你開了第一個AdoQuery1, 找到廠牌, 要回寫到Query2中, 卻為何沒有下 Edit或Append 2.或許你想的是直接對DBedit.Text做回存, 其實DBedit.Text:= xxx , 這只是改了buffer中 text 值, 實際上的Field並沒有被更新! 所以你應該是直接對 Query2.FieldByName('b_id').Value:= form1.adoquery1.FieldByName('b_id').AsString 方式做更新, 這樣 dbgrid 就有更新值(可能還要對 dbgrid1.refresh 或 dbgrid1.update) 至於form1, form9的關係, 看來沒有太大的問題, 而你在Form9.Close前, 因為 ADOquery1 是查詢用, 應該在close後就用不到了, 所以建議把它ADOquery1.Close, 可以減少記憶體佔用的問題! ===================引 用 like760416 文 章=================== 而我寫的程式碼是 if edit2.text<>'' then begin form1.adoQuery1.Close; form1.adoQuery1.SQL.Clear; form1.adoQuery1.SQL.Add('Select * from 廠牌 where brand="' edit2.text '"'); form1.adoQuery1.Open; form1.dbedit31.text := form1.adoquery1.FieldByName('b_id').AsString; form1.dbedit32.text := form1.adoquery1.FieldByName('brand').AsString; form9.Close; end else showmessage('請輸入廠牌名稱'); ......form1裡面有dbgrid和dbedit,它們是互相有關聯的。而form9是放查詢的條件。 而我所寫的程式 它只會改變上面的dbedit,而dbgrid它卻不會指向那一筆資料= = , |
like760416
一般會員 發表:2 回覆:5 積分:1 註冊:2008-04-11 發送簡訊給我 |
錯誤第一點不懂= = 。
可是form1裡面我只有adotable,adoconnection,adoquery各一個去連結~~~~~~~~而form9裡面就沒有 還是意思說form9裡面也需要有???? form9是form1按查詢鍵才跳出來的喔!form9裡面只有單單的edit和button唷! 而dbedit31、dbedit32是跟dbgrid關聯在一起的,所以dbgrid變動時那兩個也是跟著變動的。
編輯記錄
like760416 重新編輯於 2008-05-29 21:56:25, 註解 無‧
|
shunaaron
高階會員 發表:13 回覆:94 積分:106 註冊:2006-10-06 發送簡訊給我 |
form1.adoquery1.FieldByName('b_id').AsString := form1.dbedit31.text ;
adoQuery1.Post將資料存回去 不過...你的設計還蠻怪的...為何一個查詢條件要分開來?? 還有你的fomr和元件名字還真.....取個有意義點的名字.. 對你日後都有好處...不要一直使用原本元件名字 你所請的指向哪一筆資料,有點不太懂你的意思 是指~你點到哪一個資料嗎?或是目前是哪一筆嗎 如果是的或 adoQuery1.RecNo 而且~書上這寫會有寫才對,不知是你有沒有仔細去看 或者,你是看錯書了呢= = ===================引 用 like760416 文 章=================== 各位大大~~ 現在我遇到一個問題,就是我做了一個主系統且是跟資料庫有連結的,上面有新增刪除查詢...的鍵,而查詢鍵一按,就會跳出另一個form是用來輸入查詢的條件,當查詢的條件輸入好後,按確定就會把剛剛要查詢的資料顯示在主系統上,請問一下這要如何把值傳回去,且可以抓到那個條件值? 而我寫的程式碼是 if edit2.text<>'' then begin form1.adoQuery1.Close; form1.adoQuery1.SQL.Clear; form1.adoQuery1.SQL.Add('Select * from 廠牌 where brand="' edit2.text '"'); form1.adoQuery1.Open; form1.dbedit31.text := form1.adoquery1.FieldByName('b_id').AsString; form1.dbedit32.text := form1.adoquery1.FieldByName('brand').AsString; form9.Close; end else showmessage('請輸入廠牌名稱'); ......form1裡面有dbgrid和dbedit,它們是互相有關聯的。而form9是放查詢的條件。 而我所寫的程式 它只會改變上面的dbedit,而dbgrid它卻不會指向那一筆資料= = , 不知是哪裡錯了= = ,書上都沒寫>"<。 可以幫我解答一下嗎?? 感謝~~~
------
程式沒有這麼難 只是還沒打通其中要絕 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
1.如果我寫的你完全看不懂的話, 那代表你的基本功等於零! 建議你對 資料庫管理的連結的書多看多讀, 每一本書都有談到非常詳細有關元件與資料庫關聯的之間關係, 要不然我們兩邊會變成雞同鴨講, 我不知道要用多低階的說法來向你解釋
2.你提到 adotable, adoquery, 這就是我第一點提到, 你應該有兩組 3.你上面的程式應該是寫在form9上, 我也沒有告訴你form9要放! 因為你的form9就是很單純的查詢畫面, 雖然不知道書上為什麼要叫你用兩個視窗來做(這是多此一舉, 除非你的查詢功能十分複雜, 或者是這個查詢畫面是要共用的), 查詢的程式也沒有太大的問題, 重點在於我提到的第二個錯誤觀念, 你再仔細多看幾遍, 我相信我的文字造詣沒那麼糟吧! 4.而第一個錯誤是告訴你, 你根本沒有對 adotable 進行異動, 因為你只對 xxx.text異動而己, 所以我才會質疑table 沒有異動, 如果進行更新, 這方面你得多看相關資料庫處理的章節, 因為這就是一個很基本的功課 ===================引 用 like760416 文 章=================== 錯誤第一點不懂= = 。 可是form1裡面我只有adotable,adoconnection,adoquery各一個去連結~~~~~~~~而form9裡面就沒有 還是意思說form9裡面也需要有???? form9是form1按查詢鍵才跳出來的喔!form9裡面只有單單的edit和button唷! 而dbedit31、dbedit32是跟dbgrid關聯在一起的,所以dbgrid變動時那兩個也是跟著變動的。 |
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
form1上放一個TDataSource (name=DS1),
DS1.dataset := adoquery1; DBEdit 跟 DBGrid的 DataSource := DS1; form9 form1.adoquery1.close . . . SQL.語法 form1.adoquery1.open; ========不需要 form1.dbedit31.text := form1.adoquery1.FieldByName('b_id').AsString; form1.dbedit32.text := form1.adoquery1.FieldByName('brand').AsString; ========= foem9.close 這樣form1的 DBGrid 跟 DBEdit 都是顯示SQL出來的那筆資料..是這樣嗎. |
like760416
一般會員 發表:2 回覆:5 積分:1 註冊:2008-04-11 發送簡訊給我 |
是滴~~~但是dbgrid它不會跟著動~~~
我還在研究~~~ 因為大家都給我這麼多意見~~~ 要努力研究~~~~
編輯記錄
like760416 重新編輯於 2008-05-30 23:39:16, 註解 無‧
|
pillar62
資深會員 發表:9 回覆:324 積分:271 註冊:2002-04-15 發送簡訊給我 |
|
like760416
一般會員 發表:2 回覆:5 積分:1 註冊:2008-04-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |