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

請教版版大人前輩, 有關DBEdit輸入問題

答題得分者是:T.J.B
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-13 23:16:39 IP:218.165.xxx.xxx 未訂閱
問題一: 我如何做到說我的TABLE裡有輸入 CITY | ROAD | SEC |POST ------------------------------------------------ 台北市大安區 | 和平東路 | 一段 |106 ------------------------------------------------- 當我輸入"台北市大安區"和平東路時,自動帶出郵遞區號 問題二: 就是我的Table裡有一筆客戶名稱"國泰電腦有限公司" 當我輸入"國泰"兩個字時,程式自動帶出電腦有限公司 感謝您的幫忙!! ^^"
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-13 23:31:52 IP:211.23.xxx.xxx 未訂閱
同時回答二個問題 用QUERY.LOCATE(要找的欄位,要找的值,搜尋方式) 搜尋方式 1.loCaseInsensitive 不分大小寫 2.loPartialKey 模糊查詢 3.不給時完全吻合 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-14 08:45:42 IP:61.219.xxx.xxx 未訂閱
引言: 問題一: 我如何做到說我的TABLE裡有輸入 CITY | ROAD | SEC |POST ------------------------------------------------ 台北市大安區 | 和平東路 | 一段 |106 ------------------------------------------------- 當我輸入"台北市大安區"和平東路時,自動帶出郵遞區號 問題二: 就是我的Table裡有一筆客戶名稱"國泰電腦有限公司" 當我輸入"國泰"兩個字時,程式自動帶出電腦有限公司
哈哈,用本公司當範例,不想回答都不行喔! 以下是我的作法供您參考: 1.在DbEdit輸入地址完成後,OnExit事件中,抓前面12個Bytes到資料庫中去比對, 找到郵遞區號後將之填入郵遞區號欄位,但是有些地址分區只有五個字,所以12個bytes找不到,再抓10個bytes再找一次郵遞區號. 2.在DBEdit輸入的OnKeyPress事件中,判段輸入的總長度超過4個bytes以上時,自動到資料庫比對前4bytes為"國泰"兩個中文字的筆數有幾筆,若只有一筆就自動帶出,若超過一筆,就等輸入的字夠多時,且只找到一筆時才自動填入! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-16 16:11:49 IP:61.218.xxx.xxx 未訂閱
前輩,小弟還是搞不懂該怎麼寫.@_@ ,霧煞煞ㄉ~ 可否勞請高抬貴手,給個sample, 3Q~~3Q~~
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-16 16:35:17 IP:61.220.xxx.xxx 未訂閱
引言: 前輩,小弟還是搞不懂該怎麼寫.@_@ ,霧煞煞ㄉ~ 可否勞請高抬貴手,給個sample, 3Q~~3Q~~
如下 : unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var Address: String; begin Address := (Edit1.text) // <--- 你所輸入的區別 exp: 台北市大安區 if Query1.Locate('CITY',Address,[]) then //<--利用Address變數做搜尋CITY欄位 begin Edit2.text := Query1.FieldByName('POST').資料型態; //自動帶出郵遞區號 end else begin Edit2.text := ''; end; end; end. 可選擇你認為較適合的事件地方寫入 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-24 12:02:20 IP:61.218.xxx.xxx 未訂閱
引言: 同時回答二個問題 用QUERY.LOCATE(要找的欄位,要找的值,搜尋方式) 搜尋方式 1.loCaseInsensitive 不分大小寫 2.loPartialKey 模糊查詢 3.不給時完全吻合 @@~~飛翔在天際的精靈~~@@
再次請教前輩!! 我現在寫好郵遞區號抓取方式如下,但是如果碰到5個字的地區就抓不到了,請前輩指導,謝謝!! //帶出郵遞區號 address:=copy(wwdbedit4.text,1,12); if datamodule2.QPOST.Locate('POSTNAME', address, []) then begin wwdbedit23.Text:=datamodule2.QPOST.fieldbyname('POSTCODE').asstring; datamodule2.QFA01.fieldbyname('COPST').AsString:=wwdbedit23.Text; end else begin wwdbedit23.Text:=''; end;
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-24 12:49:02 IP:211.20.xxx.xxx 未訂閱
不太懂你的意思,你是說你的郵遞區號有3個字,也有五個字是不是 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-24 23:50:19 IP:218.165.xxx.xxx 未訂閱
引言: 不太懂你的意思,你是說你的郵遞區號有3個字,也有五個字是不是 @@~~飛翔在天際的精靈~~@@
不好意思,我說錯了! 應該是區域名稱!! 例如: 高雄市新興區 ->6個中文字 台南市中區 ->5個中文字 像這樣子我寫的程式就抓不到了...請指導,謝謝!
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-25 09:13:32 IP:61.220.xxx.xxx 未訂閱
引言:
引言: 不太懂你的意思,你是說你的郵遞區號有3個字,也有五個字是不是 @@~~飛翔在天際的精靈~~@@
不好意思,我說錯了! 應該是區域名稱!! 例如: 高雄市新興區 ->6個中文字 台南市中區 ->5個中文字 像這樣子我寫的程式就抓不到了...請指導,謝謝!
因為你程式其中一行是 address:=copy(wwdbedit4.text,1,12); 是以address做長度6個字的搜尋 所以碰到5個字以內的地區當然就抓不到了 把copy function拿掉 你試試看 address := Trim(wwdbedit4.text); < >< > 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/09/25 09:16:18 發表人 - T.J.B 於 2002/09/25 09:17:48
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-25 16:23:45 IP:61.218.xxx.xxx 未訂閱
我試過Trim還是一樣抓不到??請問還有別的方式嗎?
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-09-25 16:53:01 IP:211.20.xxx.xxx 未訂閱
可否借問一下你的資料庫為何,及你的POSTNAME的型態為何 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-09-25 17:01:54 IP:61.220.xxx.xxx 未訂閱
引言: 我試過Trim還是一樣抓不到??請問還有別的方式嗎?
另外請你秀出address變數的內容為何 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/09/25 17:04:07
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-09-25 17:23:18 IP:61.218.xxx.xxx 未訂閱
前輩您好!小弟用的是MySQL create table QFA01( ID INT(9) NOT NULL AUTO_INCREMENT, //自動編號 CH_NAME VARCHAR(60), //客戶名稱 COPST VARCHAR(9), //郵遞區號 ADDRESS VARCHAR(120), //地址 PRIMARY KEY(ID) ); CREATE TABLE QPOST( POSTNAME VARCHAR(60), //區域名稱 POSTCODE VARCHAR(10), //區域號碼 ); 因為區域名稱有的是5個中文字,有的是6個字以上的! INSERT INTO QPOST VALUES("654","雲林縣四湖鄉"); INSERT INTO QPOST VALUES("655","雲林縣元長鄉"); INSERT INTO QPOST VALUES("700","台南市中區"); INSERT INTO QPOST VALUES("701","台南市東區"); procedure TfdFA01.wwDBLookupComboDlg1Exit(Sender: TObject); var address:string; begin address:=copy(wwdbedit4.text,1,12); if datamodule2.QPOST.Locate('POSTNAME', address, []) then begin wwdbedit23.Text:=datamodule2.QPOST.fieldbyname('POSTCODE').asstring; datamodule2.QFA01.fieldbyname('COPST').AsString:=wwdbedit23.Text; end else begin wwdbedit23.Text:=''; end; end;
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-09-26 13:42:25 IP:211.22.xxx.xxx 未訂閱
依您的Table表上而言只有ADDRESS VARCHAR(120), //地址,而非顯示之 CITY ROAD SEC POST各有其欄位,是故在 address:=copy(wwdbedit4.text,1,12); 對六個中文字時沒有問題,但對五個中文字時所取得資料並非五個字而是 六個字,例如 台南市中區中華路 抓取到的資料是”台南市中區中”,難怪你會找不到資料,你可以Trace if datamodule2.QPOST.Locate('POSTNAME', address, []) then 看看address的內容為何
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-09-26 15:49:58 IP:61.218.xxx.xxx 未訂閱
這我知道,但是我的意思是如何讓程式能夠先找6個字,如果找不到在去比對5個字,可以這麼做嗎? 還是誰有比較好的做法,謝謝!
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-09-26 15:58:12 IP:61.220.xxx.xxx 未訂閱
引言: 這我知道,但是我的意思是如何讓程式能夠先找6個字,如果找不到在去比對5個字,可以這麼做嗎? 還是誰有比較好的做法,謝謝!
我了解你的意思了 你是要一個字一個字找 當User每Key一個字 就去比對 是不是這樣 那你用locate去搜尋就不對 要用FindNearest 去做 這樣就找的到了 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-09-26 17:13:28 IP:211.22.xxx.xxx 未訂閱
依線上說明FindNearest是針對Key值才有效, 對POSTNAME VARCHAR(60), //區域名稱 設為Key似乎太長些。 我建議你透過SQL語法去查尋 Select POSTCODE From QPOST Where POSTNAME like :POSTNAME '%' // QPOST.ParamByName('POSTNAME').AsString := copy(wwdbedit4.text,1,10); //只能查5個中文字, 否則依然會查不到 QPOST.Open; wwdbedit23.Text:=QPOST.fieldbyname('POSTCODE').asstring; //有就有, 沒有就空白 QPOST.Close; 希望對你有所幫助
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#18 引用回覆 回覆 發表時間:2002-10-01 17:07:20 IP:211.74.xxx.xxx 未訂閱
改這樣不知道行不行 Select POSTCODE From QPOST Where POSTNAME like :POSTNAME '%' QPOST.ParamByName('POSTNAME').AsString := copy(wwdbedit4.text,1,12); //第一次查6個中文字 QPOST.Open; if QPOST.RecordCount<>0 then //找到就給值 wwdbedit23.Text:=QPOST.fieldbyname('POSTCODE').asstring esle begin QPOST.Close; Select POSTCODE From QPOST Where POSTNAME like :POSTNAME '%' QPOST.ParamByName('POSTNAME').AsString := copy(wwdbedit4.text,1,10); //第二次查5個中文字 QPOST.Open; if QPOST.RecordCount<>0 then wwdbedit23.Text:=QPOST.fieldbyname('POSTCODE').asstring end; QPOST.Close; 發表人 - chih 於 2002/10/01 17:08:58
kgt
高階會員


發表:17
回覆:308
積分:165
註冊:2002-03-13

發送簡訊給我
#19 引用回覆 回覆 發表時間:2002-10-03 12:32:10 IP:61.30.xxx.xxx 未訂閱
先判別地址的第5個中文字 if 第5個中文字value = '區' begin 取地址前5個中文字去找 end else begin 取地址前6個中文字去找 end;
xBaby
一般會員


發表:1
回覆:15
積分:8
註冊:2002-08-14

發送簡訊給我
#20 引用回覆 回覆 發表時間:2002-10-04 16:29:52 IP:61.70.xxx.xxx 未訂閱
如果是用 Pos('區', Address) 來找到位置 在決定要取多長的字串,會不會好做些; 當然如果還有其他的 '代表字' 【依法辦理】囉。
系統時間:2024-05-07 1:54:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!