線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1174
推到 Plurk!
推到 Facebook!

如何在 dbgrid 中輸入文字, 然後會自動顯示最接近之記錄

答題得分者是:Justmade
kitsnews
一般會員


發表:9
回覆:17
積分:10
註冊:2003-06-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-02 10:06:56 IP:202.64.xxx.xxx 未訂閱
invoice (iId, iDesc) invoiceDetail(iId, pId, qty) product(pId, pName) 小弟用的是 dbexpress, 用了3個 TSimpleDataSet 第一個是用來存取 invoice table 的, 在欄位管理內 add all field 之後便把所有 field 拖拉到 form 上. 第二個是用來存取 invoiceDetail table 的, 在欄位管理內 add all field 之後, 就把 master source 指向第一個 TSimpleDataSet 所產生的 datasource, 第三個是用來給第二個 TSimpleDataSet 送上相關 Product Name, 所以第三個的 commandtext 是 "select * from product), 另外, 在第二個 TSimpleDataSet 中的欄位管理內新增了一個 LookupField, LookupDataSet 是指向第三個 TSimpleDataSet. 整理好以上的屬性後, 小弟放了一個 DBGrid 在 form 上, DataSource 是指向由第二個 TSimpleDataSet 連接著的 DataSource, 另外我又放了一個 DBNavigatorBar, DataSource 是指向由第一個 TSimpleDataSet 連接著的 DataSource, 好成功地當 invoice 的 cursor 移動時, dbgrid 正反映相關的 detail, 但當我想在 DBGrid 新增一些 item 的時候, 我只可以用 mouse click 那個 combo box 來選擇. 想請教各位前輩, 有什麼方法可以在 dbgrid 中輸入部分 product name, 然後會自動顯示最接近之記錄? 小弟乃是 delphi 新手, 請各位前輩多多指教. 我十分欣賞 delphi ktop 的那種互助的精神.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-04 09:00:39 IP:202.39.xxx.xxx 未訂閱
http://www.delphi.club.tw/viewtopic.php?t=1164 --- --<-<-<@
kitsnews
一般會員


發表:9
回覆:17
積分:10
註冊:2003-06-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-04 09:21:19 IP:202.64.xxx.xxx 未訂閱
謝謝 hagar, 除了用 third party 的control 外, 有沒有其他辦法呢? 小弟乃是 delphi 新手, 請各位前輩多多指教. 我十分欣賞 delphi ktop 的那種互助的精神.
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-04 09:47:36 IP:218.16.xxx.xxx 未訂閱
你這個對一個新手來說不好做    主要的問題是 1. 如何判定使用者輸入時應是修改資料還是找尋資料 2. dbGrid 沒有一個 Text 屬性給使用者及程式知道他現在在找甚麼,如使用者按 a , 停 5 秒再按 b, 那應找 b 還是 ab ?    若你有原則去判定上述兩點,可在 DBGrid 的 onKey Down 收集按鍵,否則你另用一個 TEdit 做搜尋會容易很多。    知道要搜尋甚麼後可以 :
if product.Locate('pName',Edit1.Text,[loCaseInsensitive, loPartialKey]);
  invoiceDetail.Locate('pID',product.FieldBYName('pID').Value,[]);
記得若有多張不同 invoice 含有這個產品時,只會找到第一個。
kitsnews
一般會員


發表:9
回覆:17
積分:10
註冊:2003-06-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-04 09:56:01 IP:202.64.xxx.xxx 未訂閱
引言: 你這個對一個新手來說不好做 主要的問題是 1. 如何判定使用者輸入時應是修改資料還是找尋資料 2. dbGrid 沒有一個 Text 屬性給使用者及程式知道他現在在找甚麼,如使用者按 a , 停 5 秒再按 b, 那應找 b 還是 ab ? 若你有原則去判定上述兩點,可在 DBGrid 的 onKey Down 收集按鍵,否則你另用一個 TEdit 做搜尋會容易很多。 知道要搜尋甚麼後可以 :
if product.Locate('pName',Edit1.Text,[loCaseInsensitive, loPartialKey]);
  invoiceDetail.Locate('pID',product.FieldBYName('pID').Value,[]);
記得若有多張不同 invoice 含有這個產品時,只會找到第一個。
謝謝 Justmade, 我也忘了要判斷是新增或是修改, 謝謝你的提點. 小弟乃是 delphi 新手, 請各位前輩多多指教. 我十分欣賞 delphi ktop 的那種互助的精神.
系統時間:2024-05-19 0:32:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!