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

有關查詢資料庫的問題

答題得分者是:P.D.
like760416
一般會員


發表:2
回覆:5
積分:1
註冊:2008-04-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-29 00:18:42 IP:218.163.xxx.xxx 訂閱
各位大大~~

現在我遇到一個問題,就是我做了一個主系統且是跟資料庫有連結的,上面有新增刪除查詢...的鍵,而查詢鍵一按,就會跳出另一個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它卻不會指向那一筆資料= = ,
不知是哪裡錯了= = ,書上都沒寫>"<。

可以幫我解答一下嗎??
感謝~~~
編輯記錄
like760416 重新編輯於 2008-05-29 00:19:40, 註解 無‧
like760416 重新編輯於 2008-05-29 09:30:07, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-29 17:42:40 IP:61.67.xxx.xxx 未訂閱
程式裡犯了兩個嚴重的錯誤(非設計上, 是觀念上)
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-29 21:54:54 IP:218.163.xxx.xxx 訂閱
錯誤第一點不懂= = 。
可是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-29 23:45:59 IP:220.134.xxx.xxx 訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-30 12:47:57 IP:61.67.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-05-30 17:12:19 IP:61.62.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-05-30 23:38:25 IP:123.110.xxx.xxx 訂閱
是滴~~~但是dbgrid它不會跟著動~~~

我還在研究~~~
因為大家都給我這麼多意見~~~
要努力研究~~~~
編輯記錄
like760416 重新編輯於 2008-05-30 23:39:16, 註解 無‧
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-06-04 11:43:00 IP:219.87.xxx.xxx 訂閱
您好

請問查詢出來的資料會有幾筆呢?如果是多筆,基本上都會停在第一筆!
DBGRID的DATASOURCE有指定嗎?基本上建議在FORM1的PUBLIC裡面宣告一個全域變數去接
FORM9傳回來的值然後再去做處理。試試看吧!
------
Pillar Wang
like760416
一般會員


發表:2
回覆:5
積分:1
註冊:2008-04-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-06-06 13:29:27 IP:140.128.xxx.xxx 訂閱
問題解決了~~~~

感謝各位大大餒~~~~

真的是感激~~~~

大家都好熱心唷^^~~~~~~

感謝啦~~~

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