以下資料引用自"VB入門網"
用全文檢索找"公用地址"就可以看到這一篇及檔案
再說一次我不知道有沒有幫助
1.前言
市面上所見的商用軟體,幾乎都將地址輸入列為必備的要件,而且是提供五、六年前的地址舊資料庫,而在民國八十九年一月份的 Run PC 雜誌 也是製作一個地址輸入的主題。甚至在多年前的資訊展中,軟體廠商也將地址輸入的便利性當做是廣告宣傳的賣點之一。
其實,地址輸入若以資料處理的觀點來看,只是取出應有的資料而已,難度並不高,但是對於系統分析者而言,難度反而在於如何取得最新且完整的資料,例如縣市名稱、鄉鎮市區名稱、村里名稱、道路名稱等等,假如以人工自行輸入、校對資料,將是一項非常耗費時日的工作。
2.系統分析
實務上對於地址功用有連絡地址及民法上的法定地址,其要求內容是有差異。例如 X 公司的地址為
法定地址:台北市忠孝東路一段 X 號之十一、十二、十三
連絡地址:台北縣三重市重新路二段 X 號
公文書信、發票地址是以法定地址為主,而與其交易過程的物流、金流則是與連絡地址的人員洽辦。為何會如此運作呢?主要是因為企業對於交通、人力、金融服務的方便性考量。在做系統分析時,為適應實務需求,可以演化出各種不同系統需求類型。
考慮因素 作法
在資料欄位設計方面 必須包括法定地址及連絡地址二個欄位。
在列印標籤方面 要有直印及橫印二項功能,則必須考慮將數字全形。
是否顧及法定要求方面 將數字予以國字的一、二、三...十一、十二...表示。
資料庫容量與保密性要求方面 是否將地址資料予以全部數字化,取出或列印時則以程式判斷,降低資料庫容量,國內不少替公司行號大量列印地址標籤,即採用此一方法儲存近百萬份各行各業地址。如台北市市政府位於台北市信義區市府路1號可以 6300 2000 0020 6481 0000 0000 0000 0001 0000 0000 0000 代碼表示。
顧及郵遞區號的驗證方面 郵政總局自推行五碼郵遞區號失敗後,又回歸原來的三碼書寫方式。不管客戶提供或者自行搜尋的地址裡的郵遞區號,可以在輸入時予以驗證,有如營利事業統一編號及國民身份證編號驗證,甚至配合郵遞作業,由原來的三碼,自行根據輸入地址判斷轉換成五碼。
顧及地址英譯方面 將中文地址予以翻譯成英文。
配合地圖資訊系統方面 配合該系統做市場調查分析之用。因為買賣業或不動產業,強調是 Location! Location! Location!,對於現行地址資料能某一定程度配合地圖資訊系統。
3.如何蒐集完整道路資料 (此一步驟非常重要,請按表操課罷!)
為了統合上述的系統分析,作者在搜尋網路資源時,發現交通部郵政總局提供相當完整的道路資料,可以做為範例說明的基本來源。假如你未予以下載並按下列步驟操作,則本主題的程式碼不用下載,以免浪費各位寶貴時間及上網費用、電話費用。
本主題在系統分析之前,先行下載其郵遞區號查詢及應用軟體產生系統(Win95版),並按下列步驟執行安裝及匯入資料至 Access 2000 資料庫。
1 一次下載完整檔 Allinone.exe (約12M,以 56K 數據機在離峰時段下載差不多要 49 分鐘),請將該檔案下載至您的硬碟裡。檔案下載完畢後,請執行 Allinone.exe 檔,逕行檔案解壓縮,然後執行安裝。
2 打開 Access 2000;建立新的資料庫;
3 執行「檔案」、「取得外部資料」、「匯入」;
4 出現「匯入畫面」,在「檔案類型」選項選擇「OBDC資料庫」;
5 出現「選擇資料來源」畫面,點選「機器資料來源」頁面;在同一畫面,點選「Visaul FoxPro Table」;在同一畫面按「確定」按鈕;
6 出現「Configure Connection」畫面,在「Database Type」選項選擇「Free Table Directory」;在同一畫面,「Path」輸入區輸入如「c:\dbf」或「d:\zip32w\dbf」(視你將 allinone.exe 安裝至那一目錄而定);
7 出現「匯入物件」畫面,可以選擇「全選」按鈕;
8 修改模組 basPath 裡的 gstrDBFile_Test,改為你儲存資料表位置。
Public Function gstrDBFile_Test() As String
gstrDBFile_Test = "C:\Utility\Dat\utyRoad.mdb"
End Function
上述會如此做,主要是作者嘗試以 OBDC 方式直接連結至目錄 d:\zip32w\dbf 時,失敗機率非常高,因此偷懶採取熟悉的 Access 資料庫作為資料連結來源。
4.畫面設計
操作畫面一 操作畫面二
本次範例操作畫面則與郵政總局提供的郵遞區號查詢及應用軟體產生系統(Win95版)大部份相同,只增加系統分析需要的技巧,讀者假如是複製本範例在公司加以增添修改自用,請先看一看郵政總局版權聲明,本處只是示範提供有別其以 Visual FoxPro 所設計的技巧。
另外為了說明起見,針對系統分析部份加入下列項目:以郵政總局地址台北市金山南路二段55號為例(來源自交通部郵政總局編印的《臺灣地區郵遞區號薄》(中華民國八十八年八月出版)
※ 郵遞區號驗證,系統自動找出郵遞區號為106;
※ 英文地址,如自動翻譯成 "No. 55, Sec. 2, Jinshan S. Rd., Taipei, Taiwan, R.O.C.";
※ 半形數字,自動轉換全形數字如「台北市金山南路二段55號」;
※ 阿拉伯數字轉換中文數字,如「台北市金山南路二段五五號」及「台北市金山南路二段五十五號」;
※ 配合《中華民國臺閩地區各市、鎮、鄉、村里代碼(八十四年版)》(行政院主計處編印)及交通部郵政總局的道路編號,示範數位地址。
區分 縣市 鄉鎮 道路 鄰 巷 弄 號 之 樓 之 室
長度 5 5 6 4 4 4 4 4 4 4 4
中文 台北市 金山南路二段 55
數位 63003 00000 434521 0000 0000 0000 0055 0000 0000 0000 0000
有關主計處所編的代碼規則為省(2)+縣市(3) +鄉鎮(2) +村里(3),在此不予詳細說明。請至正中書局或者三民書局等的『中華民國政府機關出版品』區購買。有書面及光碟二種格式。
假如公司有地下樓則以9字為開頭,如地下二樓為 9002,地上二樓則 0002。至於公司行號標示某某大樓或者前棟後棟者,由於較為特殊,本範例暫不予以處理。
5.後記
由於本程式較為複雜,仍有許多小地方無法涵蓋,如尋找特殊地址、某某大樓、前棟後棟者等則未予處理,另外有關錯誤處理部份,因時間所囿,未予以補充,讀者有發現錯誤者,可以至 VB入門網訪客留言板,留下你(妳)的意見或者程式碼,本人將予以修改,放至個個擊破處。
各地道路的開拓而建立新的道路名稱,或者因其他理由更改鄉鎮名稱、村里名稱或道路名稱,都會造成參考資料庫的不足,記得還是要定期更新。
假如下載後,自行修改者,請自行至郵局免費索取《臺灣地區郵遞區號薄》,了解其說明再對照程式碼。你可能改用 DataList or DataCombo 物料替代範例之 List Object,以前者來寫程式碼較為精簡。另外你要深入了解下載的資料表格式及內容,不要企圖去修改資料表內容 (如null值以SQL指令全部填入0 或 " "),以契合你的程式,而是牽就於它,好處是下次下載新的資料時,不用重新對資料表內容加以修改。如下列尋找郵遞區號程式碼,即是牽就於資料表內容,將依縣市名稱及道路名稱條件所找到的記錄,放入於陣列,再行比對陣列裡巷弄號等條件,取出郵遞區號,而不是利用 SQL 指令更改內容或者利用 SQL 指令找尋資料。
'------------------------------------------------
' 2.取得相關資料,置於陣列。
' 至於五碼郵遞區號,則在astrSQL(1),astrSQL(2)將
' "... FROM ZIP3 ..." 改為 "... FROM RALL1...",
' 不過其例外情形很多,本程序可能無法完全辦到。
'------------------------------------------------
astrSQL(2) = "SELECT ZIPCODE,EVEN,CMP_LABLE,LANE," _
& "ALLEY,NO_BGN,NO_END FROM ZIP3" _
& " WHERE CITY = " & Chr(39) & strParam_City & Chr(39) _
& " AND ROAD = " & Chr(39) & strParam_Road & Chr(39)
Set objRec = New ADODB.Recordset
objRec.Open astrSQL(2), mobjConn, adOpenDynamic, adLockReadOnly
For i = 1 To intCnt
vntData(i, 1) = objRec!ZIPCODE ' 郵遞區號
vntData(i, 2) = objRec!EVEN ' 單雙數
vntData(i, 3) = objRec!CMP_LABLE ' 編號
vntData(i, 4) = objRec!LANE ' 巷
vntData(i, 5) = objRec!ALLEY ' 弄
Select Case vntData(i, 3)
Case 1
vntData(i, 6) = 1 ' 開始編號
vntData(i, 7) = 9999 ' 結束編號
Case 2
vntData(i, 6) = 2 ' 開始編號
vntData(i, 7) = 9998 ' 結束編號
Case Else
vntData(i, 6) = objRec!NO_BGN ' 開始編號
vntData(i, 7) = objRec!NO_END ' 結束編號
End Select
' 可以看到查詢的結果
Debug.Print vntData(i, 1), vntData(i, 2), vntData(i, 3), vntData(i, 4), _
vntData(i, 5), vntData(i, 6), vntData(i, 7)
objRec.MoveNext
Next
6.程式下載
假如未下載郵遞區號查詢及應用軟體產生系統(Win95版)並按上列「3.如何蒐集完整道路資料」步驟操作,則本主題的程式碼不要下載,以免浪費各位寶貴時間及上網及電話費用。