請教版版大人前輩, 有關DBEdit輸入問題 |
答題得分者是:T.J.B
|
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
問題一:
我如何做到說我的TABLE裡有輸入 CITY | ROAD | SEC |POST
------------------------------------------------
台北市大安區 | 和平東路 | 一段 |106
-------------------------------------------------
當我輸入"台北市大安區"和平東路時,自動帶出郵遞區號 問題二:
就是我的Table裡有一筆客戶名稱"國泰電腦有限公司"
當我輸入"國泰"兩個字時,程式自動帶出電腦有限公司 感謝您的幫忙!! ^^"
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 問題一: 我如何做到說我的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 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 前輩,小弟還是搞不懂該怎麼寫.@_@ ,霧煞煞ㄉ~ 可否勞請高抬貴手,給個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 發送簡訊給我 |
引言: 同時回答二個問題 用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 發送簡訊給我 |
|
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言:因為你程式其中一行是 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引言: 不太懂你的意思,你是說你的郵遞區號有3個字,也有五個字是不是 @@~~飛翔在天際的精靈~~@@不好意思,我說錯了! 應該是區域名稱!! 例如: 高雄市新興區 ->6個中文字 台南市中區 ->5個中文字 像這樣子我寫的程式就抓不到了...請指導,謝謝!
------
天行健 君子當自強不息~~@.@ |
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
前輩您好!小弟用的是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 發送簡訊給我 |
依您的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 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
依線上說明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 發送簡訊給我 |
改這樣不知道行不行
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 發送簡訊給我 |
|
xBaby
一般會員 發表:1 回覆:15 積分:8 註冊:2002-08-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |