請教一下 在DBGRID裡的欄位值怎麼樣可以去抓資料庫的資料 |
尚未結案
|
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
|
huangeider
高階會員 ![]() ![]() ![]() ![]() 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
謝這位大大的回答
可是我要做出來的是在DBGRID裡面輸入商品編號,按下ENTER後,他的商品和價錢的欄位也會跟者出來,顯示在同一列
現在是不知道要怎麼樣按下ENTER鍵以後,去資料庫抓到資料出來,所以是主要的問題 您要如此的功能應該用 tstringgrid之類的元件(非資料感知性元件) 做才合乎邏輯,畢竟dbgrid在您開啟連結後,相關的資料就會load進來,若對單一table而言,除非要從另一個table載入相關資料,否則應不須如此做。不知您是否是要從其他table載入相關資料? 「堅持」從洗馬桶做起
Aric 發表人 - huangeider 於 2003/11/18 12:32:25
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 我的意思是在 DBGrid 所對應的 DataSet 中,加入商品名稱、商品售價的 Lookup Field,當然你必須先建立一個料號的 TQuery 或 TTable,且必須先行 Open。 好處是你不但可以輸入產品編號,按下 Enter 鍵後,商品名稱、商品售價就會自動幫你帶出,甚至在 DBGrid 中,產品名稱會有下拉選單可用,並且會更新產品編號欄位,對不知產品編號而只知產品名稱的使用者而言,一樣可以方便使用。 但缺點就如先前 huangeider 所言,要被 Lookup 的 TQuery 或 TTable 必須先行開啟,就網路與主機的 Loading 而言,會比較重一點,只有先行衡量一下,再決定用法了。 以上一點點意見
------
Fishman |
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: papalili 你好,我的意思是 DBGrid 的資料來源是 DataSource,而 DataSource 的資料來自於 DataSet(TQuery or TTable),因此必須在 DataSet 中新增兩個欄位,商品名稱與售價,KeyField 為商品編號,而 LookupField 的資料來源為料號主檔(設定與DBLookupComboBox類似)
1.先對 TQuery Double Click,出現的 Field Editor 中,按下滑鼠右鍵,選擇 Add all Fields 將資料庫之欄位先行加入
------
Fishman |
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
謝謝Fishman大大的詳細見解
我也嘗試過了
可是帶出來商品名稱和價格
只是有點問題,就是TTable的active要設成true
dbgrid才會出來 可是會全部的資料都會從資料庫帶出來
所以我想問說 可不可以在執行時DBGRID會呈現未輸入資料的狀態
而在輸入商品編號的情況下才會帶出商品名稱和價格且可以跳到下一個輸入 我之前好像看到有討論到說DBGRID裡面好像不能輸入資料
因為在ACTIVE設成true的話就表示會把資料庫的資料通通都秀出來 所以我想不知道這一種方法可不可行
就是先設一個edit然後在裡面輸入商品的編號
按下ENTER以後,就會在DBGRID裡面出現商品的編號順便也可以帶出來
商品的名稱及價格 這是我的想法 只是不知道合不合理
也不知道可不可行
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 如果是這樣,DBGrid 所指向的 DataSet 改使用 TQuery,並於輸入前記得必須先行 Open,只是 Query 的結果不要讓它有任何資料(比如在條件句中,設定某一欄位為不可能的值),如此一來,DBGrid 中不會有任何資料,且可以進行資料之新增(不能輸入資料的是 IWDBGrid 而不是 DBGrid)。 如果你要用 Edit 來作,不如用 DBEdit,會比較方便,不過可能沒這個必要
------
Fishman |
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
謝謝大大的意見 我使用你提供的意見,使用Tquery
可是還是跟之前一樣的問題
可能是我哪裡有弄錯或誤解大大的意思 我現在把我的過程寫出來
我使用的是資料庫是(SQL2000)
裡面有一個資料表叫做GOODS
裡面的欄位有我需要的國際條碼,商品名稱,售價都在同一個資料表裡
以下就是我製作的介面
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: TADOQuery1 的 Command Text 寫法如下(範例)
select * from goods where 商品編號 = :p1
在程式中
TADOQuery1.Close;
TADOQuery1.ParamByName('P1').AsString := '';
TADOQuery1.Open;
如此一來,TADOQuery1即可被開啟,且無任何資料並允許被新增
至於 TADOQuery2,建議更改為 TADOTable,並與已開啟,如此在你輸入之國際條碼,方可找出對應之商品名稱與售價。
加油,再試試看
------
Fishman |
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
謝謝大大的講解
我馬上試過 你說在程式中
TADOQuery1.Close;
TADOQuery1.ParamByName(''P1'').AsString := '''';
TADOQuery1.Open; 可是我只能輸入
aoquery1.close;
adoquery1.這個後面的函式好像就沒有parambyname可以選擇
所以不知道是我寫錯地方 還是大大有別的涵義
所以我就沒有打這段程式跑跑看 就出現下面的畫面
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 你可以在 BDGrid 的 OnKeyDown 事件中去判斷,並把 VK_RETURN 改為 VK_DOWN
IF ((Key = RETURN) and (欄位 = 會作用的欄位)) THEN BEGIN Key := VK_DOWN END;如此即可已將按下Enter 鍵模擬成按向下鍵繼續新增
------
Fishman |
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 在這裡,我指的是,當你在商品編號欄位按下 Enter 鍵後,直接跳下一筆,因此作用欄位即為商品編號,如此可避免當你在 DBGrid 中按下 Enter 鍵,程式自動幫你轉換為向下鍵的問題,也就是說,你可以設定特定欄位使這個功能生效,而非在整個 DBGrid 中。 此外,我是使用 BDE,經測試後還有一些問題,當按下向下鍵後,你會發現該筆資料會不見(在 DBGrid 中),可是資料庫卻已經寫入,而前端的 RecordCount 卻未增加,經向高人請教,只要使用 TQuery 在 POST 後會有此一問題,必須將該 TQuery 重新 Open 過才會正常,而 TTable 卻無此問題,不知 ADOQuery 會不會如此?
------
Fishman |
kakene
一般會員 ![]() ![]() 發表:22 回覆:52 積分:19 註冊:2003-01-07 發送簡訊給我 |
引言: 大大不好意思 因為看不懂 欄位 = 會作用的欄位 這個的意思 這三個欄位都有作用 國際條碼把商品名稱及售價帶出來 那這個意思我不怎麼懂也 可能是我太笨 領悟力太差 不好意思Fishman 大大的意思應該是,按 Enter 後要往下新增一筆的欄位 IF ((Key = vk_RETURN) and (DBGrid1.SelectedIndex = 0)) THEN BEGIN Key := VK_DOWN; END;綠色是指dbgrid的第幾個欄位 0 = 第一個欄位 , 1 = 第二個欄位 不知道有沒有誤會Fishman 大大的意思... |
kakene
一般會員 ![]() ![]() 發表:22 回覆:52 積分:19 註冊:2003-01-07 發送簡訊給我 |
引言: Hi: 在這裡,我指的是,當你在商品編號欄位按下 Enter 鍵後,直接跳下一筆,因此作用欄位即為商品編號,如此可避免當你在 DBGrid 中按下 Enter 鍵,程式自動幫你轉換為向下鍵的問題,也就是說,你可以設定特定欄位使這個功能生效,而非在整個 DBGrid 中。 此外,我是使用 BDE,經測試後還有一些問題,當按下向下鍵後,你會發現該筆資料會不見(在 DBGrid 中),可是資料庫卻已經寫入,而前端的 RecordCount 卻未增加,經向高人請教,只要使用 TQuery 在 POST 後會有此一問題,必須將該 TQuery 重新 Open 過才會正常,而 TTable 卻無此問題,不知 ADOQuery 會不會如此? |
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
謝謝kakene大大和Fishman大大
用這個IF ((Key = vk_RETURN) and (DBGrid1.SelectedIndex = 0))
就可以寫出來了 可是跟我實際想出來還有一點點的誤差
因為我是想在國際條碼輸入13碼以後就自己會把商品名稱和售價帶出來
再按下ENTER以後,才會跳到下一列
這樣只要按一次ENTER 若照之前的話 就要在國際條碼輸入ENTER後才會把商品名稱和售價帶出來
再按下ENTER後,才會跳到下一列
這的話,就要按兩次ENTER 所以我是想按一次ENTER
不好意思 太龜毛了
謝謝各位大大
|
kakene
一般會員 ![]() ![]() 發表:22 回覆:52 積分:19 註冊:2003-01-07 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 試了半天,試不出來,因為抓不到目前DBGrid 中的輸入狀況,如果抓的到,則寫法就與 DBEdit 相同 拉了一個 TDBEdit DataSource 與該 DBGrid 相同,DataField 為商品編號並加入以下程式碼:
OnChange事件 procedure TForm1.DBEdit1Change(Sender: TObject); begin IF ((Sender AS TDBEdit).DataSource.DataSet.State = dsEdit) or ((Sender AS TDBEdit).DataSource.DataSet.State = dsInsert) THEN (Sender AS TDBEdit).DataSource.DataSet.FieldByName((Sender AS TDBEdit).DataField).AsString := (Sender AS TDBEdit).Text; end; OnKeyPress事件 procedure TForm1.DBEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin IF ((Key = VK_RETURN) AND (Length((Sender AS TDBEdit).Text) >= 13)) THEN (Sender AS TDBEdit).DataSource.DataSet.Append; end;
------
Fishman |
stonys
初階會員 ![]() ![]() 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
|
papalili
一般會員 ![]() ![]() 發表:28 回覆:31 積分:11 註冊:2003-09-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |