Bàn về chương trình tìm kiếm TỈNH, HUYỆN, XÃ trong nước (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,974
Trước đây có vài người làm chương trình này rồi nhưng vài hôm trước tôi chợt nghĩ ra giải thuật tìm kiếm mới, tin chắc sẽ cho tốc độ tìm kiếm nhanh hơn rất nhiều so với những gì ta đã làm
Hiện tại tôi đang có trong tay:
- Toàn bộ CSDL tỉnh huyện xã trong nước
- Giải thuật tìm kiếm
Vấn đề đang gặp phải của tôi là:
- Tôi không biết người dùng cần 1 chương trình như thế nào?
- Người dùng cần 1 giao diện như thế nào?
- Tương tác giữa chương trình và bảng tính ra sao?

Vân.. vân...
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Vậy hy vọng những ai cần dùng chương trình này đóng góp ý kiến (như phần tô màu xanh ở trên), tôi sẽ ra chương trình đúng như nhu cầu của số đông
(nói thêm rằng: tôi không cần dùng chương trình này để làm gì cả, chỉ là... có "hứng" muốn viết chơi)
 
Trước đây có vài người làm chương trình này rồi nhưng vài hôm trước tôi chợt nghĩ ra giải thuật tìm kiếm mới, tin chắc sẽ cho tốc độ tìm kiếm nhanh hơn rất nhiều so với những gì ta đã làm
Hiện tại tôi đang có trong tay:
- Toàn bộ CSDL tỉnh huyện xã trong nước
- Giải thuật tìm kiếm
Vấn đề đang gặp phải của tôi là:
- Tôi không biết người dùng cần 1 chương trình như thế nào?
- Người dùng cần 1 giao diện như thế nào?
- Tương tác giữa chương trình và bảng tính ra sao?

Vân.. vân...
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Vậy hy vọng những ai cần dùng chương trình này đóng góp ý kiến (như phần tô màu xanh ở trên), tôi sẽ ra chương trình đúng như nhu cầu của số đông
(nói thêm rằng: tôi không cần dùng chương trình này để làm gì cả, chỉ là... có "hứng" muốn viết chơi)

Theo em thì phải tạo 3 bảng, nếu dùng CSDL quan hệ:

1. Tỉnh/ Thành Phố:
-MaTinh
-Ten
-Loai
2. Quận Huyện:
-MaQuanHuyen
-MaTinh
-Ten
-Loai
3. Xã Phường
-MaXaPhuong
-MaQuanHuyen
-Ten
-Loai
 
Upvote 0
Theo em thì phải tạo 3 bảng, nếu dùng CSDL quan hệ:

1. Tỉnh/ Thành Phố:
-MaTinh
-Ten
-Loai
2. Quận Huyện:
-MaQuanHuyen
-MaTinh
-Ten
-Loai
3. Xã Phường
-MaXaPhuong
-MaQuanHuyen
-Ten
-Loai
Ah, hổng phải vậy Hai Lúa à (thậm chí tôi có cách bố trí tối ưu hơn)
Ở đây cái tôi cần là: chưa biết xây dựng giao diện người dùng ra sao (vì có biết người dùng cần gì đâu mà xây)
 
Upvote 0
Ah, hổng phải vậy Hai Lúa à (thậm chí tôi có cách bố trí tối ưu hơn)
Ở đây cái tôi cần là: chưa biết xây dựng giao diện người dùng ra sao (vì có biết người dùng cần gì đâu mà xây)
Dạ vậy ý tưởng của Sư Phụ là đem lại tiện ích gì cho người dùng? Và dùng nó như thế nào?
 
Upvote 0
Dạ vậy ý tưởng của Sư Phụ là đem lại tiện ích gì cho người dùng? Và dùng nó như thế nào?
Thì tôi đâu có biết nên mới hỏi xem người dùng cần điều gì thì tôi sẽ viết phục vụ
Chỉ vậy thôi
Nói chung mọi thứ "nguyên liệu" đã có và đang chờ người dùng "gọi món" sẽ nấu như ý họ
 
Upvote 0
Thì tôi đâu có biết nên mới hỏi xem người dùng cần điều gì thì tôi sẽ viết phục vụ
Chỉ vậy thôi
Nói chung mọi thứ "nguyên liệu" đã có và đang chờ người dùng "gọi món" sẽ nấu như ý họ
Em cứ tưởng....
Hay là Sư Phụ làm cái lý lịch nhân viên đi sẽ có người cần. Tuy nhiên để xây dựng nó cần phải có thời gian và công sức nhiều đó Sư Phụ.
 
Upvote 0
Trước đây có vài người làm chương trình này rồi nhưng vài hôm trước tôi chợt nghĩ ra giải thuật tìm kiếm mới, tin chắc sẽ cho tốc độ tìm kiếm nhanh hơn rất nhiều so với những gì ta đã làm
Hiện tại tôi đang có trong tay:
- Toàn bộ CSDL tỉnh huyện xã trong nước
- Giải thuật tìm kiếm
Vấn đề đang gặp phải của tôi là:
- Tôi không biết người dùng cần 1 chương trình như thế nào?
- Người dùng cần 1 giao diện như thế nào?
- Tương tác giữa chương trình và bảng tính ra sao?

Vân.. vân...
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Vậy hy vọng những ai cần dùng chương trình này đóng góp ý kiến (như phần tô màu xanh ở trên), tôi sẽ ra chương trình đúng như nhu cầu của số đông
(nói thêm rằng: tôi không cần dùng chương trình này để làm gì cả, chỉ là... có "hứng" muốn viết chơi)
Hy vọng là sẽ có ai đó bên lĩnh vực nhân sự hoặc bảo hiểm xã hội xem bài này của anh.
 
Upvote 0
Upvote 0
Upvote 0
Theo mình được biết thì các đơn vị HC của ta đã được mã hóa;
Nhưng có điều mỗi anh làm 1 cách, gồm ngành: Bưu điện, Tổng cục Thống kê, BHXH 1 fách; Mấy anh chị Tài nguyên môi trường làm mã kiểu khác
Tựu chung là chưa ai nể ai & chưa thống nhất được.
Cũng nghe nói, trong số danh định công dân cũng chứa nhóm số để chứng tỏ nơi sinh ra mỗi người nữa.

Nếu muốn làm 1 mẫu chung cho ai/ngành nào cũng xài được là hơi bị fiêu!

/)ù sao mình cũng rất mong sự kiện này ra đời & đóng góp của mọi người cho xum tụ đi đến hoàn chỉnh.
 
Upvote 0
Anh Ndu thử vầy xem sao giống cái Phần mềm VPN của Vietnamobile chạy kết nối với máy chủ em đang xài vầy

1/ Tao 1 Textbox nhập tỉnh trước hãy gõ chữ B nó sẻ xổ ra một loạt chữ B đầu xong chọn VD: B nó ra .... Bình Dương vvv
2/ Tao 1 TextBox cho Huyện khi đã nhập tỉnh xong thì mặc định trên Text Huyện nó sẻ lọc hết tất cả các huyện trong Tỉnh ở câu 1
3/ Tạo 1 TextBox cho Xã nó sẻ lọc hết tất cả những xã trong huyện mình đã lọc ở câu 2

Nói chung nó logic như vậy ... khi đã chọn tỉnh rồi thì câu 2 và 3 nó sẻ tự lọc ra theo logic ta chon vào đó nó xổ ra chọn là xong
 
Upvote 0
Upvote 0
Theo mình được biết thì các đơn vị HC của ta đã được mã hóa;
Nhưng có điều mỗi anh làm 1 cách, gồm ngành: Bưu điện, Tổng cục Thống kê, BHXH 1 fách; Mấy anh chị Tài nguyên môi trường làm mã kiểu khác
Tựu chung là chưa ai nể ai & chưa thống nhất được.
Cũng nghe nói, trong số danh định công dân cũng chứa nhóm số để chứng tỏ nơi sinh ra mỗi người nữa.

Nếu muốn làm 1 mẫu chung cho ai/ngành nào cũng xài được là hơi bị fiêu!

/)ù sao mình cũng rất mong sự kiện này ra đời & đóng góp của mọi người cho xum tụ đi đến hoàn chỉnh.
Em sẽ tự tạo mã riêng của mình trên nguyên tắc:
- Mã tỉnh 3 ký tự
- Mã huyện 6 ký tự, trong đó có chứa luôn 3 ký tự mã tỉnh mà nó thuộc
- Mã xã 9 ký tự, trong đó có chứa 6 ký tự mã huyện mà nó thuộc
Vậy chỉ cần nắm được 1 mã là lập tức có thể truy ra "cha" hoặc "ông" của nó
Ví dụ:
- Ta có xã Tân Thái có mã: 012007022
- Vậy thì 012007 chính là mã huyện mà nó thuộc, tức huyện Đại Từ
- Suy ra tiếp 012 là mã tỉnh, tức Thái Nguyên
 
Upvote 0
Em sẽ tự tạo mã riêng của mình trên nguyên tắc:
- Mã tỉnh 3 ký tự
- Mã huyện 6 ký tự, trong đó có chứa luôn 3 ký tự mã tỉnh mà nó thuộc
- Mã xã 9 ký tự, trong đó có chứa 6 ký tự mã huyện mà nó thuộc
Vậy chỉ cần nắm được 1 mã là lập tức có thể truy ra "cha" hoặc "ông" của nó
Ví dụ:
- Ta có xã Tân Thái có mã: 012007022
- Vậy thì 012007 chính là mã huyện mà nó thuộc, tức huyện Đại Từ
- Suy ra tiếp 012 là mã tỉnh, tức Thái Nguyên
Tạo như vậy nó giống cách tạo mã chứng Minh thư đó ... Em ko nhớ lắm đại ý nó như sau
VD: Thanh hóa : 172100399 ... thanh hóa có 171,172,173,174 gì đó
172 = Tỉnh
10 = Huyện
0399 = mã cá nhân
 
Upvote 0
Vậy là hơi xa xỉ đó nha với cả thẩy 9 kí số!
Theo như quyết định của ngài PV Khải nêu trên, mã tỉnh chỉ là 2 kí số;
Theo mình, mã huyện cũng chỉ là 2+2 (4 kí số) mà thôi. Lí do ư, ở ta chưa có trường hợp nào cao hơn HN & ở Thủ đô chỉ chưa vượt qua 99 đơn vị quận huyện cơ mà?
& cũng như lí thuyết trên, chưa có Quận huyện nào có trên 99 phường xã.

Có lúc mình còn suy nghĩ tới mã hóa tính/thành theo quân khu; Vì chúng ta có 9 quân khu mà thôi;
Như quân I có các tình Lang Sơn (15), Cao Bằng (14), Bắc Giang (12), Bắc Cạn (11), Bắc Ninh (13) & Thái Nguyên (16)
 
Upvote 0
Vậy là hơi xa xỉ đó nha với cả thẩy 9 kí số!
Mục đích là để đồng bộ tất cả các mã, tạo điều kiện cho việc xử lý dễ dàng sau này. Cứ cắt từng 3 ký tự ra là xong, khỏi lăn tăn lúc 2 ký tự, lúc lại 3 ký tự đó sư phụ à
(Excel có đến 15 ký tự, xài có 9 thôi, lo gì sư phụ)
Bằng mọi giá, em phải làm sao để việc xử lý dễ dàng nhất và tốc độ tìm kiếm nhanh nhất có thể
 
Upvote 0
Dạng bài này chỉ là 1 công cụ (Tool) để áp cho 1 ứng dụng nào đó - nó khó có thể là 1 ứng dụng lớn.
Tuy thế, việc thống nhất Postal Code cho cả nước là vấn đề cần thiết, thuận cho thời kỳ số hiện nay
 
Upvote 0
Upvote 0
Anh làm hết luôn vô ko cho người ta tùy chọn tỉnh, huyện Or xã nữa sao .... hay ý tưởng test xem sao xong điều chỉnh sau
Làm thử thôi mà, chủ yếu cho mọi người xem thuật toán và cách bố trí dữ liệu. Còn chuyện sau đó... quá dễ, có ý tưởng thiết kế mới sẽ làm tiếp (cái mình bí chính là ý tưởng thiết kế, vì không biết người dùng muốn cái gì)
------------------------------------
Vừa đăng bài trước xong, tự dưng nghĩ ra cách mã hóa ID kiểu khác: Mã theo hệ thập lục phân, như vậy từ 9 ký tự chỉ còn 6
Version 1.1 ---> Xin mời
 

File đính kèm

Upvote 0
Làm thử thôi mà, chủ yếu cho mọi người xem thuật toán và cách bố trí dữ liệu. Còn chuyện sau đó... quá dễ, có ý tưởng thiết kế mới sẽ làm tiếp (cái mình bí chính là ý tưởng thiết kế, vì không biết người dùng muốn cái gì)
------------------------------------
Vừa đăng bài trước xong, tự dưng nghĩ ra cách mã hóa ID kiểu khác: Mã theo hệ thập lục phân, như vậy từ 9 ký tự chỉ còn 6
Version 1.1 ---> Xin mời
Với Excel, mình nghỉ mã nên có ký tự "L" (Local) ở đầu: L01, L02... để mã luôn là chuổi, tránh tình trạng vì lý do nào đó chuổi "01" thành số 1
 
Upvote 0
.... (cái mình bí chính là ý tưởng thiết kế, vì không biết người dùng muốn cái gì)
------------------------------------.....

nếu làm 1 công cụ có ích - có lẽ làm dạng kiểu calendar (nhập ngày tháng) có thể gắn vào tra cứu từng cell (ô) trên sheet / hoặc textbox nhập trên form => thì sẽ có ích cho phát triển các ứng dụng cần nhập Tỉnh huyện xã...
 
Upvote 0
Em sẽ tự tạo mã riêng của mình trên nguyên tắc:
- Mã tỉnh 3 ký tự
- Mã huyện 6 ký tự, trong đó có chứa luôn 3 ký tự mã tỉnh mà nó thuộc
- Mã xã 9 ký tự, trong đó có chứa 6 ký tự mã huyện mà nó thuộc
Vậy chỉ cần nắm được 1 mã là lập tức có thể truy ra "cha" hoặc "ông" của nó
Ví dụ:
- Ta có xã Tân Thái có mã: 012007022
- Vậy thì 012007 chính là mã huyện mà nó thuộc, tức huyện Đại Từ
- Suy ra tiếp 012 là mã tỉnh, tức Thái Nguyên
Đặt mã kiểu này giống như hồi trước em làm cái file gia phả. Từ mã của một người có thể truy ra tất cả những người có quan hệ với người đó.
http://www.giaiphapexcel.com/diendan/threads/cùng-xây-dựng-file-gia-phả.88861/
 
Upvote 0
Với Excel, mình nghỉ mã nên có ký tự "L" (Local) ở đầu: L01, L02... để mã luôn là chuổi, tránh tình trạng vì lý do nào đó chuổi "01" thành số 1
Mình vẫn giữ quan điểm nhất quán về độ dài của mã. Nếu lo số 0 đằng trước bị biến mất (vì lý do gì đó) thì ta chuyển nó thành số 1 là xong. Tức mã luôn bắt đầu = 1 (trước đây mã bắt đầu =01 thì giờ đổi lại bắt đầu =10)
Để chuyển đổi mã đang có sang kiểu mới, chỉ cần công thức:
Mã:
=D2H(DECIMAL(A2,16)+DECIMAL(REPT("0F",LEN(A2)/2),16),LEN(A2))
Với D2H là hàm tự tạo:
Mã:
Function D2H(ByVal Num As Long, Optional ByVal Places As Long) As String
  Dim qt As Long, rd As Long, sTmp As String
  qt = Num
  Do
    rd = qt Mod 16
    qt = Int(qt / 16)
    sTmp = Mid("0123456789ABCDEF", rd + 1, 1) & sTmp
  Loop Until qt = 0
  If Places = 0 Then Places = Len(sTmp)
  D2H = Right(String(Places, "0") & sTmp, Places)
End Function
----------------------------------------------
Nếu đã muốn chọn mã dạng chuỗi thì sao không là ABC######, các bạn?
Ví dụ
HNi123321
HPg214300
HCM123456
LSn951002
Mã của em tuy nhìn thấy là dạng chuỗi nhưng có thể tính toán được đấy sư phụ à (cộng trừ nhân chia ngon luôn như sư phụ đã thấy ở công thức em chuyển đổi mã ở trên). Trường hợp sau này có tách Tỉnh, Huyện, Xã, em chỉ cần lấy mã đang có rồi cộng thêm 1 gia số nữa là xong
Mấy ký tự HNi, HP gì đó nhìn "ngon" nhưng "ăn" không "ngon" đâu sư phụ (không tính toán được và chỉ khiến cho việc tìm kiếm chậm thêm)
-------------------------------------------
Đặt mã kiểu này giống như hồi trước em làm cái file gia phả. Từ mã của một người có thể truy ra tất cả những người có quan hệ với người đó.
http://www.giaiphapexcel.com/diendan/threads/cùng-xây-dựng-file-gia-phả.88861/
Từ mã con truy ra mã cha <---- Chính xác là tôi đang dùng cách này
Tôi cũng có ý tưởng xa hơn là với cách bố trí và đặt mã như hiện nay, có thể áp dụng cho nhiều bài toán khác (gia phả là 1 ví dụ). Bài toán Tỉnh, Huyện, Xã chỉ là "khởi động"
 

File đính kèm

Upvote 0
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Theo em thì phải tạo 3 bảng, nếu dùng CSDL quan hệ:

Bước đầu tiên của thiết kế phần mềm là xác định tầm vực và giới hạn của nó:
- Phần mềm sẽ làm gì và không làm gì.
- Trong tương lai có hể nới rộng hay không, và nới rộng tối đa đến mức nào.
- Khả năng giao diện với phần mềm khác
Bước đầu tiên của CSDL là xác định tầm vực của nó. Tuỳ theo ứng dụng phần mềm mà cách xác định khác nhau. Trong trường hợp này thì xác định ra sau:
- Có tất cả bao nhiêu tỉnh, (ước lượng) bao nhiêu huyện, (ước lượng) bao nhiêu xã. Và khả năng trong tương lai mức độ tăng giảm của các con số này ra sao?
- Mỗi tỉnh có tối đa/ tối thiểu bao nhiêu huyện, mỗi huyện có tối đa/ tối thiểu bao nhiêu xã.
Riêng trong trường hợp này ta có thêm điều rắc rối là cấp quận và phường của thành phố. Như vậy sự tuonwg quan quận phường huyện xã ra sao? Đây là CSDL, mọi vệc phải xác định, khong thể nói chuyện hiểu ngầm.

Trước khi xác định tầm vực thì đặt vấn đề mã là quá sớm.
 
Upvote 0
Trước khi xác định tầm vực thì đặt vấn đề mã là quá sớm.
Cách đặt mã đã nói lên tất cả. Tầm vực là <256
Thật ra cũng không có tỉnh nào có 100 huyện, không có huyện nào 100 xã nên dùng 2 ký tự Hexa đặt mã là quá thừa rồi
 
Upvote 0
Dạng bài này chỉ là 1 công cụ (Tool) để áp cho 1 ứng dụng nào đó - nó khó có thể là 1 ứng dụng lớn. . . .
Mình cũng tán thành với í kiến này.
Chủ iếu công cụ này xài để nhập liệu cho CSDL nhân sự có trường/cột địa điểm hay địa fương nào đó ở VN
Như nhập nơi sinh, trú quán, thường trú,. . .
Nhập nơi đến trong giấy đi fép, giấy đi đường, lập các loại biên bản hành chính, tòa án, . . . .

Trên diễn đàn cũng đã có vài công cụ nhỏ lẽ để nhập điểm (cho các em HS) cho nhanh, nhập cho trường [Ngày-tháng] cho lẹ hơn bình thường mà thôi.

Để tiện hòa nhập & trở thành công cụ nhỏ trong chu trình nhập liệu, ta nên đưa lên Form; Sẽ gọi công cụ này ra khi cần & đóng lại hay cho ẩn đi khi nhập xong cho 1 dòng bất kì.

Rất vui sẽ nhận được fản hồi & góp ý từ các bạn trong cộng đồng về suy nghĩ riêng của mình!
 
Upvote 0
Với Excel, mình nghỉ mã nên có ký tự "L" (Local) ở đầu: L01, L02... để mã luôn là chuổi, tránh tình trạng vì lý do nào đó chuổi "01" thành số 1
Nghĩ lại thấy việc đặt mã với ký tự đầu dạng chuỗi thấy cũng hợp lý! Vậy tôi quyết định đổi từ 10 ---> A0, cộng thêm 90 nữa bằng cách dùng công thức giống bài 28
=D2H(DECIMAL(A2,16)+DECIMAL(REPT("90",LEN(A2)/2),16),LEN(A2))
Không lo hàm VLOOKUP bị lẫn lộn giữa số và chữ
--------------------------------------
Theo tính toán thì:
- Từ A0 đến FF là 96 trường hợp
Theo thống kê số liệu về số lượng đơn vị hành chánh trong nước thì:
- Số quận/huyện nhiều nhất có trong 1 tỉnh là 30 (TP Hà Nội)
- Số phường/xã nhiều nhất có trong 1 huyện là 48 (Huyện Thái Thụy)
Vậy mã hóa tính từ A0 đến FF = 96 trường hợp là quá thừa
 
Lần chỉnh sửa cuối:
Upvote 0
Nhàn cư cũng xin góp hệ mã tỉnh như sau:
A0 - An Giang
. . . .
G0 - Gia Lai (Rai?)
H0 - Hà Giang
H1 - Hà Nam
H2 - Hà Nội
H3 - Hà Tĩnh
H4 - Hải Dương
H5 - Hải Fòng
H6 - Hậu Giang
H7 - Hồ Chí Minh
H8 - Hòa Bình
H9 -Hưng Iên
. . . . . .
 
Upvote 0
Anh ndu có thể tham khảo cách tìm kiếm này xem sao
Trên textBox Tỉnh ta có thể thực hiện vài thao tác sau:

1/ Khi ta đặt vị trí con chuột tai đó nhấn phín tắt VD: F9 thì nó sổ ra toàn bộ các tỉnh có thanh cuộn lên xuông coi các tỉnh
trong khi ta keo lên xuống coi các tỉnh thì cột bên phải là mã các tỉnh cùng với dòng của tỉnh đó ... Mục đích là khi mới sử dụng làm quen với mã tỉnh để nhớ

2/ khi ta quen và nhớ mã tỉnh rồi thì ta không cần nhấn phín tắt F9 nữa mà ta gõ thẳng mã Tỉnh vào đó là nó Tìm ra: VD Thanh hóa : TH01 chẳng hạn nó tìm ra

3/ Trường hợp ta không nhớ mã tỉnh hay ko nhấn F9 ta có thể Gõ chữ Th nó sẻ tìm ra 1 số tỉnh có Chữ Th

Khi thực hiên thao tác Tìm tỉnh xong thì Mặc định logic các TexBox Huyện, Xã kia nó cũng đã lọc ra ta chỉ việc thực hiên bước 1,2 hay 3 là ok

đó là những gì Em thấy trên phần mềm VPN do FPT (Vietnam Viết) mà em đang xài tìm kiếm thấy khoa học và logicCapture.PNG
 
Upvote 0
Trước đây có vài người làm chương trình này rồi nhưng vài hôm trước tôi chợt nghĩ ra giải thuật tìm kiếm mới, tin chắc sẽ cho tốc độ tìm kiếm nhanh hơn rất nhiều so với những gì ta đã làm
Hiện tại tôi đang có trong tay:
- Toàn bộ CSDL tỉnh huyện xã trong nước
- Giải thuật tìm kiếm
Vấn đề đang gặp phải của tôi là:
- Tôi không biết người dùng cần 1 chương trình như thế nào?
- Người dùng cần 1 giao diện như thế nào?
- Tương tác giữa chương trình và bảng tính ra sao?

Vân.. vân...
Nói chung, tôi không làm trong cơ quan hành chính nhà nước nên chưa mường tượng được sẽ xây dựng chương trình này theo kiểu gì
Vậy hy vọng những ai cần dùng chương trình này đóng góp ý kiến (như phần tô màu xanh ở trên), tôi sẽ ra chương trình đúng như nhu cầu của số đông
(nói thêm rằng: tôi không cần dùng chương trình này để làm gì cả, chỉ là... có "hứng" muốn viết chơi)
Gởi anh Ndu

Thắng không có nhu cầu sử dung chương trình tìm kiếm này nhưng theo Thắng hình dung thì màn hình tìm kiếm này sẽ bao gồm 4 ô tìm kiếm có pop up kiểu như data validation, list vậy:
1/ Ô đầu tiên: miền, vùng. đơn giản nhất là Bắc, Trung Nam, nếu chi tiết hơn thì có vùng, ví dụ: miền Bắc có Tây Bắc, Đông Bắc, Trung du, ...; mien Trung có Bắc Trung bộ, Trung Trung bộ, Nam Trung bộ, .....

2/ ô thứ 2: Tỉnh, các tỉnh tương ứng sẽ hiện ra tương ứng với miền, vùng ở ô thứ 1.

3/ Ô thứ 3: huyện, các huyện tương ứng sẽ hiện ra tương ứng với tỉnh ở ô thứ 2.

4/ Ô thứ 4: xã, các xã tương ứng sẽ hiện ra tương ứng với huyện ở ô thứ 3.

Các ô tìm kiếm nên có chức năng tìm theo chữ người dung gõ vào ở từng ô, bên cạnh chức năng pop up sổ xuống.
 
Upvote 0
. . . . Nhưng theo Thắng hình dung thì màn hình tìm kiếm này sẽ bao gồm 4 ô tìm kiếm có pop up kiểu như data validation, list vậy:
1/ Ô đầu tiên: miền, vùng. đơn giản nhất là Bắc, Trung Nam, nếu chi tiết hơn thì có vùng, ví dụ: miền Bắc có Tây Bắc, Đông Bắc, Trung du, ...; mien Trung có Bắc Trung bộ, Trung Trung bộ, Nam Trung bộ, .....
2/ ô thứ 2:
3/ . . . .
4/ . . . .
Nếu theo bạn thì những người sử dụng fải biết & nhớ địa lí VN trình độ 'B' trở lên; Theo mình có nghĩa là fải đạt 60 - 80 % câu trả lời là tỉnh cụ thể nào đó ở vùng, miền nào!
Chuyện này có thể là không tưởng, . . . ( /(hà, Khà, khà,. . . )
Nên đổi qua trường hợp: Nhập 1 kí tự đầu tên tỉnh, thì xuất hiện trong danh sách các tỉnh có kí tự đầu như đã gõ.

Đã lâu rồi giờ mới lại xuất hiện Thắng nhỉ?
Dạo này nhậu còn khỏe không?

Chúc vui!
PHP:
'
Mã T     Tên tỉnh         Mã H     Tên Huyện'
A0     An Giang         A0A0     An Phú
B0     Bà Rịa - Vũng Tàu  A0C0     Châu Đốc
B1     Bắc Cạn           A0C1     Châu Phú
B2     Bắc Giang         A0C2     Châu Thành
B3     Bạc Liêu         A0C3     Chợ Mới
B4     Bắc Ninh         A0P0     Phú Tân
B5     Bến Tre           A0T0     Tân Châu
B6     Bình Định         A0T1     Thoại Sơn
B7     Bình Dương         A0T2     Tịnh Biên
B8     Bình Phước         A0T3     Tri Tôn
B9     Bình Thuận         B0B0     Bà Rịa
       Cà Mau            B0C0     Châu Đức
       Cần Thơ            B0B1     Côn Đảo
       Cao Bằng            B0F0     Đất đỏ
       Đà Nẵng            B0L0     Long Điền
       Đắc Lắc            B0T0     Tân Thành
       Đắk Nông            B0V0     Vũng Tàu
       Điện Biên            B0X0     Xuyên Mộc
       Đồng Nai            B1B0     Ba Bể
       Đồng Tháp            B1B1     Bắc Cạn
       Gia Lai            B1B2     Bạch Thông
       Hà Giang            B1C0     Chợ Đồn
       Hà Nam            B1C1     Chợ mới
       Hà Nội            B1N0     Na Rì
       Hà Tĩnh            B1N1     Ngân Sơn
       Hải Dương         B1P0   Pác Nặm
. . .     . . . .
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu theo bạn thì những người sử dụng fải biết & nhớ địa lí VN trình độ 'B' trở lên; Theo mình có nghĩa là fải đạt 60 - 80 % câu trả lời là tỉnh cụ thể nào đó ở vùng, miền nào!
Chuyện này có thể là không tưởng, . . . ( /(hà, Khà, khà,. . . )
Nên đổi qua trường hợp: Nhập 1 kí tự đầu tên tỉnh, thì xuất hiện trong danh sách các tỉnh có kí tự đầu như đã gõ.

Đã lâu rồi giờ mới lại xuất hiện Thắng nhỉ?
Dạo này nhậu còn khỏe không?

Chúc vui!
PHP:
'
Mã T     Tên tỉnh         Mã H     Tên Huyện'
A0     An Giang         A0A0     An Phú
B0     Bà Rịa - Vũng Tàu  A0C0     Châu Đốc
B1     Bắc Cạn           A0C1     Châu Phú
B2     Bắc Giang         A0C2     Châu Thành
B3     Bạc Liêu         A0C3     Chợ Mới
B4     Bắc Ninh         A0P0     Phú Tân
B5     Bến Tre           A0T0     Tân Châu
B6     Bình Định         A0T1     Thoại Sơn
B7     Bình Dương         A0T2     Tịnh Biên
B8     Bình Phước         A0T3     Tri Tôn
B9     Bình Thuận         B0B0     Bà Rịa
       Cà Mau            B0C0     Châu Đức
       Cần Thơ            B0B1     Côn Đảo
       Cao Bằng            B0F0     Đất đỏ
       Đà Nẵng            B0L0     Long Điền
       Đắc Lắc            B0T0     Tân Thành
       Đắk Nông            B0V0     Vũng Tàu
       Điện Biên            B0X0     Xuyên Mộc
       Đồng Nai            B1B0     Ba Bể
       Đồng Tháp            B1B1     Bắc Cạn
       Gia Lai            B1B2     Bạch Thông
       Hà Giang            B1C0     Chợ Đồn
       Hà Nam            B1C1     Chợ mới
       Hà Nội            B1N0     Na Rì
       Hà Tĩnh            B1N1     Ngân Sơn
       Hải Dương         B1P0   Pác Nặm
. . .     . . . .
Sư phụ đặt mã kiểu này mà gặp huyện Thái Thụy thì rắc rối to.
Huyện Thái Thụy có tổng cộng 48 xã, trong đó hết 45 xã có tên bắt đầu bằng chữ Thái. Nội cái chuyên suy nghĩ tên không trùng cũng đủ mệt. Vậy thì T01 đến T48 chăng? Thế thì lại phá vỡ quy luật về độ dài mã rồi
Trong khi em dùng mã Hexa, chẳng phải suy nghĩ gì cả
 
Upvote 0
T0, . . . T9, TA,. . . TZ, T@, T#, . . . .
 
Upvote 0
T0, . . . T9, TA,. . . TZ, T@, T#, . . . .
Thì đằng nào sư phụ cũng phải... suy nghĩ, sao cho "lòi" ra được 48 ký tự khác nhau. Đặt trường hợp sau này nó thêm xã thành 90 thì còn ký tự nào nữa mà suy nghĩ? Trong khi cách đặt mã của em chỉ cần kéo fill, khỏi lo lắng gì cả. Chấp luôn trường hợp có đến 500 xã hoặc 5000 xã hay bao nhiêu em cũng không lo, thay đổi mã trong vòng 1 nốt nhạc (ưu điểm có được là vì mã của em cộng trừ nhân chia được)
Ở đây em không nói cách đặt mã nào hay hơn, em chỉ thấy rằng cách của em nó.. khỏe re là em thích rồi. Mỗi lần nhà nước thay đổi cơ cấu là mỗi lần phải vắt óc ra suy nghĩ ký tự thay thế cho mã mới, thấy không "ngon" rồi sư phụ à!
 
Upvote 0
Tôi có 1 ý tưởng, ví dụ như sau:
Có 4 cột: Tỉnh (TP) - Huyện (Quận, TP, TX) - Xã (Phường) - Ấp (thôn)
1/ Nếu tôi nhập cột Tỉnh, cột Huyện sẽ có List các Huyện (Quận, TP, TX) của tỉnh (TP) đó, tương tự cho các cột Huyện, Xã.
2/ Nếu tôi nhập Huyện(Quận, TP, TX):
2.1- Nếu Không trùng thì tự động cột Tỉnh điền tên Tỉnh(TP), kèm List cho cột Xã (Phường).
2.2- Nếu có trùng thì cột Tỉnh sẽ có list để chọn tỉnh(TP), khi chọn tỉnh (TP) xong sẽ có list cho cột Xã (Phường)
3/ Nếu tôi nhập tên Xã (Phường):
3.1 - Nếu Không trùng thì tự động cột Huyện điền tên Huyện(Quận), kèm List cho cột Xã (Phường).
3.2- Nếu có trùng thì cột Huyện sẽ có list để chọn Huyện(Quận), khi chọn Huyện (Quận) xong sẽ kèm List cho cột Xã (Phường).
4/ ...
5/ ...

Híc! Viết một hồi lại thấy "lung tung beng"
 
Upvote 0
Tôi có 1 ý tưởng, ví dụ như sau:
Có 4 cột: Tỉnh (TP) - Huyện (Quận, TP, TX) - Xã (Phường) - Ấp (thôn)
1/ Nếu tôi nhập cột Tỉnh, cột Huyện sẽ có List các Huyện (Quận, TP, TX) của tỉnh (TP) đó, tương tự cho các cột Huyện, Xã.
2/ Nếu tôi nhập Huyện(Quận, TP, TX):
2.1- Nếu Không trùng thì tự động cột Tỉnh điền tên Tỉnh(TP), kèm List cho cột Xã (Phường).
2.2- Nếu có trùng thì cột Tỉnh sẽ có list để chọn tỉnh(TP), khi chọn tỉnh (TP) xong sẽ có list cho cột Xã (Phường)
3/ Nếu tôi nhập tên Xã (Phường):
3.1 - Nếu Không trùng thì tự động cột Huyện điền tên Huyện(Quận), kèm List cho cột Xã (Phường).
3.2- Nếu có trùng thì cột Huyện sẽ có list để chọn Huyện(Quận), khi chọn Huyện (Quận) xong sẽ kèm List cho cột Xã (Phường).
4/ ...
5/ ...

Híc! Viết một hồi lại thấy "lung tung beng"
Em đang có ý này đây. Tức là chỉ cần nhớ 1 địa danh nào đó (không cần biết nó là Tỉnh hay Huyện hay Xã). Ta cứ gõ vào là lập tức nó sẽ liệt kê những cái tên liên quan
-------------------------
Riêng vụ Thôn Ấp thì em thua, bởi không có dữ liệu
Danh sách này em có được từ Tổng cụ thống kê nhà nước
http://www.gso.gov.vn/dmhc2015/Default.aspx
Trong đó chỉ liệt kê đến cấp xã thôi anh à!
 
Upvote 0
Chuyện dùng ký tự đầu là bình thường. Gặp những chỗ trùng ký tự thì tìm cách dùng ký tự đặc thù của vùng đó.
VN có nhiều tỉnh bắt đầu bằng H. Ta có thể chọn:
HG = hà giang
HN = hà nội
HB = hoà bình
HH = hà tĩnh
HM = hà nam
HC = HCM
HT = hà tiên
Việc đặt huyện, xã trùng tên quá nhiều thì có thể bỏ từ đầu, bắt đầu bằng từ thứ hai.

Có ai đã nghiên cứu thử xem các nước ngoài ngừoi ta tổ chức ra sao chưa? Điển hình là cách đặt tên tiểu bang ở Mỹ. Mỹ có 8 tiểu bang bắt đầu bằng M và 6 tiểu bang bắt đầu bằng N
 
Upvote 0
Em đang có ý này đây. Tức là chỉ cần nhớ 1 địa danh nào đó (không cần biết nó là Tỉnh hay Huyện hay Xã). Ta cứ gõ vào là lập tức nó sẽ liệt kê những cái tên liên quan
-------------------------
Riêng vụ Thôn Ấp thì em thua, bởi không có dữ liệu
Danh sách này em có được từ Tổng cụ thống kê nhà nước
http://www.gso.gov.vn/dmhc2015/Default.aspx
Trong đó chỉ liệt kê đến cấp xã thôi anh à!

Cái này cần nhiều kinh nghiệm về dò "gần đúng". Tỉnh thì có thể thống nhất chứ tên huyện xã thì có thể ngừoi ta đánh vần khác nhau.
 
Upvote 0
Chuyện dùng ký tự đầu là bình thường. Gặp những chỗ trùng ký tự thì tìm cách dùng ký tự đặc thù của vùng đó.
VN có nhiều tỉnh bắt đầu bằng H. Ta có thể chọn:
HG = hà giang
HN = hà nội
HB = hoà bình
HH = hà tĩnh
HM = hà nam
HC = HCM
HT = hà tiên
Việc đặt huyện, xã trùng tên quá nhiều thì có thể bỏ từ đầu, bắt đầu bằng từ thứ hai.
Có ai đã nghiên cứu thử xem các nước ngoài ngừoi ta tổ chức ra sao chưa? Điển hình là cách đặt tên tiểu bang ở Mỹ. Mỹ có 8 tiểu bang bắt đầu bằng M và 6 tiểu bang bắt đầu bằng N
Mỗi người mỗi ý, riêng cá nhân mình cảm thấy cách đặt mã này thiếu tính khoa học vì nó không dùng được vào việc gì cả. Khi nhập liệu chẳng ai thèm nhớ mã để làm gì, họ chỉ cần nhớ cái tên và gõ. Mã ở đây chỉ có tác dụng giúp mình quản lý dữ liệu tốt hơn (không có tác dụng cho nhập liệu)
---------------------------------------
Tỉnh thì có thể thống nhất chứ tên huyện xã thì có thể ngừoi ta đánh vần khác nhau.
Bởi vậy thống nhất về một mối: Lấy dữ liệu từ tổng cục tống kê nhà nước là tương đối nhất. Ai có cách viết khác hoặc phát âm khác, họ tự chịu (ví dụ Bắc Cạn thay vì phải là Bắc Kạn, Đắc Lắc thay vì phải là Đắk Lắk...)
 
Upvote 0
Nếu theo bạn thì những người sử dụng fải biết & nhớ địa lí VN trình độ 'B' trở lên; Theo mình có nghĩa là fải đạt 60 - 80 % câu trả lời là tỉnh cụ thể nào đó ở vùng, miền nào!
Chuyện này có thể là không tưởng, . . . ( /(hà, Khà, khà,. . . )
Nên đổi qua trường hợp: Nhập 1 kí tự đầu tên tỉnh, thì xuất hiện trong danh sách các tỉnh có kí tự đầu như đã gõ.

Đã lâu rồi giờ mới lại xuất hiện Thắng nhỉ?
Dạo này nhậu còn khỏe không?


Cảm ơn bạn nhiều, vụ gì chứ nhậu vẫn đều, có phần tăng đô. Do công việc nên ít lên GPE.
Ý kiến phản biện của bạn rất hợp lý, mình xin tiếp thu. Như vậy, theo mình vẫn nên dung ô thứ 1: miền, để hạn chế số tỉnh xuất hiện và kết hợp với giải pháp của bạn.
Thân mến
 
Upvote 0
Làm theo gợi ý của anh @Ba Tê , tức gõ đại tên gì đó (mà mình nhớ) vào TextBox, không cần biết đó là Tỉnh, Huyện hay Xã, miễn tìm thấy thì sẽ liệt kê ra listBox những địa chỉ liên quan
Mời xem file
-----------------------------------------
Code này chỉ mới "sơ khai", còn phải cải tiến rất nhiều nữa, chẳng hạn cải tiến sao cho có thể gõ tên dạng "phối hợp" vừa tên xã vừa tên huyện để rút gọn danh sách tìm kiếm. Chẳng hạn:
- Gõ Quang Trung, sẽ ra 1 danh sách rất nhiều từ khóa liên quan đến Quang Trung
- Nhưng nếu gõ Quang Trung, Đống Đa thì danh sách lập tức rút gọn chỉ còn 1 địa chỉ "Phường Quang Trung, Quận Đống Đa, Thành phố Hà Nội"
Chỗ cải tiến này mình phải suy nghĩ thêm!
 

File đính kèm

Upvote 0
Cải tiến tiếp như đã nói:
:
- Gõ Quang Trung, sẽ ra 1 danh sách rất nhiều từ khóa liên quan đến Quang Trung
- Nhưng nếu gõ Quang Trung, Đống Đa thì danh sách lập tức rút gọn chỉ còn 1 địa chỉ "Phường Quang Trung, Quận Đống Đa, Thành phố Hà Nội"
Chỗ cải tiến này mình phải suy nghĩ thêm!
bằng cách thiết kế lại Sub AutoOpen như sau:
Mã:
Public dicVNAddress As Scripting.Dictionary
Public arrSource    As Variant
Public arrAddress   As Variant
Private Sub Auto_Open()
  Dim wksVNAddress      As Worksheet
  Dim lRow              As Long
  Dim strID             As String
  Dim strParentID       As String
  Dim strFullAddress    As String
  Dim strShortAddress   As String
  On Error Resume Next
  Set wksVNAddress = ThisWorkbook.Worksheets("VNAddress")
  arrSource = wksVNAddress.Range("A2", wksVNAddress.Range("C60000").End(xlUp)).Value
  ReDim arrAddress(LBound(arrSource, 1) To UBound(arrSource, 1), 1 To 1)
  Set dicVNAddress = New Scripting.Dictionary
  For lRow = 1 To UBound(arrSource, 1)
    strID = arrSource(lRow, 1)
    strShortAddress = arrSource(lRow, 3) & " " & arrSource(lRow, 2)
    If Len(strID) <= 2 Then
      strFullAddress = strShortAddress
    Else
      strParentID = Left(strID, Len(strID) - 2)
      strFullAddress = strShortAddress & ", " & dicVNAddress.Item(strParentID)
    End If
    arrAddress(lRow, 1) = strFullAddress
    dicVNAddress.Add strID, strFullAddress
  Next
  If Err.Number Then MsgBox Err.Description
End Sub
Các chỗ khác gần như để nguyên
Giờ mở form lên và chẳng hạn:
- Ta muốn tìm "Thạnh Phú" nhưng không nhớ nó là xã hay huyện, chỉ nhớ nó ở Đồng Nai, vậy ta gõ: thạnh phú*đồng nai rồi Enter sẽ có kết quả "Xã Thạnh Phú, Huyện Vĩnh Cửu, Tỉnh Đồng Nai"
- Nếu gõ thạnh phú*long an sẽ nhận được kết quả "Xã Thạnh Phú, Huyện Thuận Hóa, Tỉnh Long An"
- Nếu gõ thạnh phú*bến tre sẽ nhận được một đống kết quả (Bị Bến Tre có huyện Thạnh Phú nên dẫn đến có một đống xã liên quan)
- Tương tự như trên, cũng có một đống kết quả khi gõ đống đa*hà nội nhưng đống đa*gia lai thì chỉ có một
--------------------------------------------
Code còn chưa được "sáng" lắm, sẽ cải tiến tiếp!
 

File đính kèm

Upvote 0
Cải tiến tiếp như đã nói:

bằng cách thiết kế lại Sub AutoOpen như sau:
Mã:
Public dicVNAddress As Scripting.Dictionary
Public arrSource    As Variant
Public arrAddress   As Variant
Private Sub Auto_Open()
  Dim wksVNAddress      As Worksheet
  Dim lRow              As Long
  Dim strID             As String
  Dim strParentID       As String
  Dim strFullAddress    As String
  Dim strShortAddress   As String
  On Error Resume Next
  Set wksVNAddress = ThisWorkbook.Worksheets("VNAddress")
  arrSource = wksVNAddress.Range("A2", wksVNAddress.Range("C60000").End(xlUp)).Value
  ReDim arrAddress(LBound(arrSource, 1) To UBound(arrSource, 1), 1 To 1)
  Set dicVNAddress = New Scripting.Dictionary
  For lRow = 1 To UBound(arrSource, 1)
    strID = arrSource(lRow, 1)
    strShortAddress = arrSource(lRow, 3) & " " & arrSource(lRow, 2)
    If Len(strID) <= 2 Then
      strFullAddress = strShortAddress
    Else
      strParentID = Left(strID, Len(strID) - 2)
      strFullAddress = strShortAddress & ", " & dicVNAddress.Item(strParentID)
    End If
    arrAddress(lRow, 1) = strFullAddress
    dicVNAddress.Add strID, strFullAddress
  Next
  If Err.Number Then MsgBox Err.Description
End Sub
Các chỗ khác gần như để nguyên
Giờ mở form lên và chẳng hạn:
- Ta muốn tìm "Thạnh Phú" nhưng không nhớ nó là xã hay huyện, chỉ nhớ nó ở Đồng Nai, vậy ta gõ: thạnh phú*đồng nai rồi Enter sẽ có kết quả "Xã Thạnh Phú, Huyện Vĩnh Cửu, Tỉnh Đồng Nai"
- Nếu gõ thạnh phú*long an sẽ nhận được kết quả "Xã Thạnh Phú, Huyện Thuận Hóa, Tỉnh Long An"
- Nếu gõ thạnh phú*bến tre sẽ nhận được một đống kết quả (Bị Bến Tre có huyện Thạnh Phú nên dẫn đến có một đống xã liên quan)
- Tương tự như trên, cũng có một đống kết quả khi gõ đống đa*hà nội nhưng đống đa*gia lai thì chỉ có một
--------------------------------------------
Code còn chưa được "sáng" lắm, sẽ cải tiến tiếp!
Em nghĩ kết quả chỉ nên trả về đến cấp có từ khóa mà thôi, liệt kê hết như thế rất rối và không cần thiết.
Ví dụ như em muốn tìm từ khóa "Hà Giang" thì kết quả trả về chỉ bao gồm: Tỉnh Hà Giang; Thành phố Hà Giang, Tỉnh Hà Giang; Xã Hà Giang, Huyện Hà Trung, Tỉnh Thanh Hóa.
Muốn xem chi tiết tỉnh Hà Giang thì nhấp vào sẽ liệt kê ra các thành phố, thị xã và huyện của tỉnh Hà Giang... Kiểu giống như cây thư mục.
 
Upvote 0
Hình như các bạn đã bước sang chuyện tìm kiếm địa danh;
Nhưng 1 CSDL, trước chuyện này fải là chuyện nhập địa danh cho 1 CSDL
Mà chuyện nhập địa danh thì biến hóa khôn lường kia đấy; Ví dụ
705 Lô C CC Ngô Gia Tự, Quận 10, TP HCM
125B đường Trần Hưng Đạo, Q. 5, TF Hồ Chí Minh.
Chuyện cấp quận hay thành fố ta có thể thỏa thuận thống nhất, nhưng cách mà người ta không ghi tên fường trong địa chỉ thì hơi rối khi nhập liệu.
Trong những trường hợp như vậy thì xử lí thế nào để chuyện từ bản khai trích ngang sang file nhân sự?
 
Upvote 0
Em nghĩ kết quả chỉ nên trả về đến cấp có từ khóa mà thôi, liệt kê hết như thế rất rối và không cần thiết.
Ví dụ như em muốn tìm từ khóa "Hà Giang" thì kết quả trả về chỉ bao gồm: Tỉnh Hà Giang; Thành phố Hà Giang, Tỉnh Hà Giang; Xã Hà Giang, Huyện Hà Trung, Tỉnh Thanh Hóa.
Muốn xem chi tiết tỉnh Hà Giang thì nhấp vào sẽ liệt kê ra các thành phố, thị xã và huyện của tỉnh Hà Giang... Kiểu giống như cây thư mục.
Ừ thì sao cũng được!
Có nghĩa là mình biết là với cách bố trí dữ liệu như vậy, cách đặt mã như vậy... mình sẽ làm được tất cả mọi yêu cầu. Còn yêu cầu từng người dùng ra sao, có thể chỉnh sửa thoải mái
Có tình huống thế này:
- Anh bạn mới quen bảo rằng anh ấy ở Thuận An
- Tôi lại quên hỏi là Thuận An nào
- Tôi chỉ chắc rằng quê anh ấy không phải ở Miền Nam
- Vậy là tôi gõ từ khóa Thuận An vào form tìm kiếm, ra được kết quả thế này:

Untitled.jpg

- Loại bỏ các vùng ở khu vực phía Nam, tôi có được 2 kết quả: Hoặc là thị trấn Thuận An ở Thừa Thiên Huế, hoặc là xã Thuận An ở Đắk Nông
Hợp lý chứ bộ!
Đương nhiên sắp tới đây, với cách đặt mã như thế, mình đã nghĩ đến sơ đồ dạng cây và đang tiến hành cải tiến
---------------------------------
Sửa lại 1 chút về cách gõ. Khỏi cần đánh dấu "*", chỉ cần các địa danh cách nhau bằng dấu phẩy là được
Ngồi buồn "vọc chơi":
- Gõ ku, lắk ---> ra một thúng
- Gõ lắk, ku ---> Hổng có cái nào
(kỳ vậy ta???)
 

File đính kèm

Upvote 0
Ngồi buồn "vọc chơi":
- Gõ ku, lắk ---> ra một thúng
- Gõ lắk, ku ---> Hổng có cái nào
(kỳ vậy ta???)
Tui có ý thế này:
- Chỉ gõ địa danh: cho ra tất cả những gì nó tìm thấy liên quan đến cái vừa nhập
- Gõ Tỉnh Hà Nội cũng lọc ra được TP Hà Nội (cùng cấp)
- Gõ "Huyện Chợ Mới" thì sẽ ra kết quả Huyện (Quận, TX, TP) Chợ Mới nếu có - Nghĩa là cùng cấp.
- Tương tự cho Xã, Phường...
 
Upvote 0
Tui có ý thế này:
- Chỉ gõ địa danh: cho ra tất cả những gì nó tìm thấy liên quan đến cái vừa nhập
- Gõ Tỉnh Hà Nội cũng lọc ra được TP Hà Nội (cùng cấp)
- Gõ "Huyện Chợ Mới" thì sẽ ra kết quả Huyện (Quận, TX, TP) Chợ Mới nếu có - Nghĩa là cùng cấp.
- Tương tự cho Xã, Phường...
Gì cũng được hết anh. Anh thích kiểu nào thì anh cứ chủ động nạp vào dictionary lúc khởi động file là được. Việc lọc dữ liệu chỉ là khâu cuối cùng. Tức là anh CÓ ĐẦU VÀO thì mới CÓ ĐẦU RA
 
Upvote 0
Trong thực tế nhập liệu cho các trường (côt) như [Nơi sinh], [Địa chỉ TT], [Địa chỉ CQ], [Nơi cư ngụ],. . . .
ta thường gặp cảnh này:
PHP:
'
Mã NV  . . . .                    Nơi sinh     '
NHH00 . . . .      Số 5 Hồ Tùng Mậu, F15, Q. Phú Nhuận, Tf Hồ Chí Minh
NTH00 . . . .      Ấp Tân Tiến, X. Tân Lập, H. Châu Thành, T. Tây Ninh
GPE.09 . . . .     05 Nguyễn Tri Phương, X. Tân Thành, H. Tiền Hải, T. Thái Bình
. . . .    . . . . .  . . . .
Để nhập địa chỉ dạng này ta sẽ fải cần 1 TextBox & 3 ComboBox chăng?
Các bạn có cao kiến gì khác hơn để áp dụng vô thực tế!

Rất mong các bạn tiếp tục hưởng ứng đề tài này!
 
Upvote 0
Rất đồng ý với anh Hai Lúa Miền Tây về "quan hệ" như trên. Hiện tại em thấy có ứng dụng đăng ký MST cá nhân của tổng cục thuế phát hành, cách thức nhập liệu giống như kiểu "quan hệ" trên. Tuy nhiên cái tệ của ứng dụng là phải kéo thanh trược combobox để chọn từng cái thay vì mình nên gõ ký tự để lọc tại conbo.
 
Upvote 0
Đó là cách xây dựng CSDL cực chuẩn!
Lúc trước mình cũng làm vậy. Tuy nhiên phải nói rằng trong một vài trường hợp cụ thể ta có thể "phá cách" (Chẳng hạn bài này đây). Nếu làm theo hướng chuẩn như trên thì sẽ khó khăn trong việc tìm kiếm 1 từ khóa mà ta chưa biết nó thuộc "cấp" nào (chứ không phải không tìm được)
- Nếu ta xây dựng giao diện theo kiểu 3 ComboBox: Tìm tỉnh ---> suy ra huyện ---> suy ra xã... thì CSDL như Hai Lúa là quá tuyệt vời
- Nếu ta xây dựng giao diện theo kiểu 1 TextBox + 1 ListBox, với TextBox dùng để gõ từ khóa (mà chưa biết nó thuộc cấp nào) thì mình sẽ dùng cách của mình (ở những bài cuối)
-----------------------------------------------
Nói chung là tùy trường hợp Hai Lúa à! Biết người dùng muốn điều gì để tạo CSDL và viết code theo hướng có lợi nhất
(và chính cái tô màu đỏ ở trên là cái mà mình đang băn khoăn chứ không phải không biết xây dựng CSDL hay viết code)
 
Upvote 0
Đó là cách xây dựng CSDL cực chuẩn!
Lúc trước mình cũng làm vậy. Tuy nhiên phải nói rằng trong một vài trường hợp cụ thể ta có thể "phá cách" (Chẳng hạn bài này đây). Nếu làm theo hướng chuẩn như trên thì sẽ khó khăn trong việc tìm kiếm 1 từ khóa mà ta chưa biết nó thuộc "cấp" nào (chứ không phải không tìm được)
- Nếu ta xây dựng giao diện theo kiểu 3 ComboBox: Tìm tỉnh ---> suy ra huyện ---> suy ra xã... thì CSDL như Hai Lúa là quá tuyệt vời
- Nếu ta xây dựng giao diện theo kiểu 1 TextBox + 1 ListBox, với TextBox dùng để gõ từ khóa (mà chưa biết nó thuộc cấp nào) thì mình sẽ dùng cách của mình (ở những bài cuối)
-----------------------------------------------
Nói chung là tùy trường hợp Hai Lúa à! Biết người dùng muốn điều gì để tạo CSDL và viết code theo hướng có lợi nhất
(và chính cái tô màu đỏ ở trên là cái mà mình đang băn khoăn chứ không phải không biết xây dựng CSDL hay viết code)
Chưa chắc đã chuẩn (?)
Chỉ chuẩn theo kiểu sách giáo khoa thôi
Vì ở đây dữ liệu tên tỉnh huyện phường xã,... đều là cùng kiểu cả đối tượng text cả và quy mô trong 1 nước số lượng cũng không nhiều, và Excel lại là môi trường database không chuẩn nếu không muốn nói là lỏng lẻo nên sử dụng quan hệ trong chính nội hàm của mã vẫn đáng giá hơn
 
Upvote 0
Trong thực tế nhập liệu cho các trường (côt) như [Nơi sinh], [Địa chỉ TT], [Địa chỉ CQ], [Nơi cư ngụ],. . . .
ta thường gặp cảnh này:
PHP:
'
Mã NV  . . . .                    Nơi sinh     '
NHH00 . . . .      Số 5 Hồ Tùng Mậu, F15, Q. Phú Nhuận, Tf Hồ Chí Minh
NTH00 . . . .      Ấp Tân Tiến, X. Tân Lập, H. Châu Thành, T. Tây Ninh
GPE.09 . . . .     05 Nguyễn Tri Phương, X. Tân Thành, H. Tiền Hải, T. Thái Bình
. . . .    . . . . .  . . . .
Để nhập địa chỉ dạng này ta sẽ fải cần 1 TextBox & 3 ComboBox chăng?
Các bạn có cao kiến gì khác hơn để áp dụng vô thực tế!

Rất mong các bạn tiếp tục hưởng ứng đề tài này!
Tùy thuộc ứng dụng, nhưng hãy nghĩ đơn giản như Google 1 textbox đa chức năng, tìm hình ảnh, video , gợi ý từ quen ...vv

Còn nếu phức tạp thì Google phải có nhiều textbox cho hình ảnh, video, website, vvv
 
Upvote 0
Chưa chắc đã chuẩn (?)
Chỉ chuẩn theo kiểu sách giáo khoa thôi
Vì ở đây dữ liệu tên tỉnh huyện phường xã,... đều là cùng kiểu cả đối tượng text cả và quy mô trong 1 nước số lượng cũng không nhiều, và Excel lại là môi trường database không chuẩn nếu không muốn nói là lỏng lẻo nên sử dụng quan hệ trong chính nội hàm của mã vẫn đáng giá hơn

Có lẽ bạn muốn nói chuẩn theo luật của CSDL LH (Relational Database)?
Theo tôi hiểu thì yêu cầu của chủ thớt là sắp xếp cấp bậc (Hierarchical). Vì vậy, thiết kế CSDL chỉ cần chuẩn bậc 1 là đủ rồi. Bậc 2 trở lên là thừa, nếu không muốn nói là sẽ không bảo đảm hiệu quả, (trừ phi ta muốn truy vấn bằng SQL hoặc cách tương tự).

Từ bài #29, tôi có đề nghị khảo sát và xác định dữ liệu. Theo cách trả lời ở bài #30 thì tôi đoán được là chủ thớt đã có chủ ý về dữ liệu và CSDL rồi.
Tóm tắt lại, chủ thớt đã có Database và các cách thức truy vấn (giao diện Database) rồi. Trong bài này, thớt chỉ hỏi giao diện với người dùng (xác định rõ lại ở bài #57).

Nói cách khác, thớt đã có máy và sườn xe rồi. Bạn chỉ cần cho ý kiến về số tay hay tự động, bao nhiêu ghế ngồi, đèn đóm vân vân thôi.
 
Upvote 0
Upvote 0
Tùy thuộc ứng dụng, nhưng hãy nghĩ đơn giản như Google 1 textbox đa chức năng, tìm hình ảnh, video , gợi ý từ quen ...vv

Còn nếu phức tạp thì Google phải có nhiều textbox cho hình ảnh, video, website, vvv

Trời đất! "Google 1 textbox" mà đơn giản.
Cả một giải thuật thống kê từ khoá của người ta...
 
Upvote 0
Chưa chắc đã chuẩn (?)
Chỉ chuẩn theo kiểu sách giáo khoa thôi
Vì ở đây dữ liệu tên tỉnh huyện phường xã,... đều là cùng kiểu cả đối tượng text cả và quy mô trong 1 nước số lượng cũng không nhiều, và Excel lại là môi trường database không chuẩn nếu không muốn nói là lỏng lẻo nên sử dụng quan hệ trong chính nội hàm của mã vẫn đáng giá hơn
Tùy thuộc ứng dụng, nhưng hãy nghĩ đơn giản như Google 1 textbox đa chức năng, tìm hình ảnh, video , gợi ý từ quen ...vv

Còn nếu phức tạp thì Google phải có nhiều textbox cho hình ảnh, video, website, vvv
Tôi đang mong chờ giải pháp của bạn đây, nói phải đi đôi với làm nhé bạn.
 
Upvote 0
@chủ thớt:
Tôi đã từng có vài năm làm quản lý đồ án phần mềm (software project manager). Đây là một số kinh nghiệm trong nghề.

Chiếu theo yêu cầu từ bài #1, bạn chỉ muốn hỏi ý kiến về cái giao diện cho người dùng, tức là cái User Interface.

Trong ngành phần mềm, không ai thiết kế một mạch từ ý kiến ban đầu đến sản phẩm cuối cùng cả. User Interface nó có giai trình tiến hoá.

- Cái bạn cần ở thời điểm này là vạch một bảng dự đoán tiến trình, và đưa ra cấp tốc một cái giao diện mẫu. Tiếng trong nghề gọi cái này là prototype. Đương nhiên lúc đưa ra bạn phải đưa kèm cái văn bản diễn tả những gì bạn nghĩ phần mềm này đáp ứng được và không đáp ứng được (đó là cái mà từ đầu tôi đã nhắc nhở về "phạm vi và giới hạn"). cái này tiếng trong nghề gọi là product description.
- Cái giao diện này không cần phải đẹp đẽ, không cần phải chạy nhanh, nó chỉ cần cung cấp các nhiệm vụ mà bạn muốn. Từ đó ngừoi ta sẽ thử dùng, và cho bạn biết những gì cần thêm bớt. Bạn cần nhắc nhở ngừoi dùng ở điểm đây chỉ là thử thách nhiệm vụ của phần mềm, không phải là sản phẩm cuối cùng nên đừng nói đến mẫu mã.
- Sau nhiều lần tiếp xúc với những ngừoi thử, và qua những lượt cải tiến, bạn sẽ tiến đến một mức khảng 75-85% cái dự đoán tiến trình mà bạn vạch ra ban đầu. Đó là lúc mà bạn sẽ bắt đầu chỉnh sửa mẫu mã và hiệu năng của gải thuật cũng như code.
- Bạn sẽ tiếp tục công việc cho đến khi đạt 100%. Sau đó là tung ra đợt bê ta.
- Sau thời gian bê ta, bạn sẽ chỉnh sửa lại đẻ có sản phẩm cuối cùng: Version 1

Lưu ý: đây là đồ án nhỏ, tôi giảm bớt đi phần vòng lại để sửa đổi thiết kế.
 
Upvote 0
Đơn giản về giao diện thấy vì bày ra nhiều

Bày ra nhiều còn không xơi nổi. Huống gì bạn muốn lờ (*) nó đi... Đến lúc muốn xơi...thì ôi thôi tại sao lúc đầu không lường trước.

(*) Lờ đi chỉ khi bạn xây dựng cho chính bạn dùng. Chứ không phải bạn làm cho người khác dùng.
 
Upvote 0
Bày ra nhiều còn không xơi nổi. Huống gì bạn muốn lờ (*) nó đi... Đến lúc muốn xơi...thì ôi thôi tại sao lúc đầu không lường trước.

(*) Lờ đi chỉ khi bạn xây dựng cho chính bạn dùng. Chứ không phải bạn làm cho người khác dùng.
Bạn thấy có google lờ đi hiệu ích nào cho người sử dụng không,
Tuy vậy có thể do tôi gõ nhầm từ "thay" (đã sửa trên) mà bạn nhầm chăng

Ở các bài trên liên quan tôi chỉ muốn đến giao diện đơn giản hiệu quả, tất nhiên code phía sau nó lại là chuyện khác vì 2 bài toán khác xa nhau
 
Upvote 0
Thử quản lý theo dạng Group xem sao:

Untitled.jpg
Muốn tìm chi tiết, bấm vào các dấu cộng
(File có dùng iGrid nên ai đang cài phiên bản Office 64 thì không dùng được)
 

File đính kèm

Upvote 0
Hi All.
em đang làm món này, tuy nhiên đang có một số vướng mắc, các anh chị xem giúp. có cách nào so sánh từng cell data tỉnh (63 tỉnh) với chuỗi text địa chỉ để tìm ko ah?
về VBA thì em mới nhập môn ko biết dùng vòng lặp. xin hỗ trợ.
 

File đính kèm

Upvote 0
Cải tiến tiếp như đã nói:

bằng cách thiết kế lại Sub AutoOpen như sau:
Mã:
Public dicVNAddress As Scripting.Dictionary
Public arrSource    As Variant
Public arrAddress   As Variant
Private Sub Auto_Open()
  Dim wksVNAddress      As Worksheet
  Dim lRow              As Long
  Dim strID             As String
  Dim strParentID       As String
  Dim strFullAddress    As String
  Dim strShortAddress   As String
  On Error Resume Next
  Set wksVNAddress = ThisWorkbook.Worksheets("VNAddress")
  arrSource = wksVNAddress.Range("A2", wksVNAddress.Range("C60000").End(xlUp)).Value
  ReDim arrAddress(LBound(arrSource, 1) To UBound(arrSource, 1), 1 To 1)
  Set dicVNAddress = New Scripting.Dictionary
  For lRow = 1 To UBound(arrSource, 1)
    strID = arrSource(lRow, 1)
    strShortAddress = arrSource(lRow, 3) & " " & arrSource(lRow, 2)
    If Len(strID) <= 2 Then
      strFullAddress = strShortAddress
    Else
      strParentID = Left(strID, Len(strID) - 2)
      strFullAddress = strShortAddress & ", " & dicVNAddress.Item(strParentID)
    End If
    arrAddress(lRow, 1) = strFullAddress
    dicVNAddress.Add strID, strFullAddress
  Next
  If Err.Number Then MsgBox Err.Description
End Sub
Các chỗ khác gần như để nguyên
Giờ mở form lên và chẳng hạn:
- Ta muốn tìm "Thạnh Phú" nhưng không nhớ nó là xã hay huyện, chỉ nhớ nó ở Đồng Nai, vậy ta gõ: thạnh phú*đồng nai rồi Enter sẽ có kết quả "Xã Thạnh Phú, Huyện Vĩnh Cửu, Tỉnh Đồng Nai"
- Nếu gõ thạnh phú*long an sẽ nhận được kết quả "Xã Thạnh Phú, Huyện Thuận Hóa, Tỉnh Long An"
- Nếu gõ thạnh phú*bến tre sẽ nhận được một đống kết quả (Bị Bến Tre có huyện Thạnh Phú nên dẫn đến có một đống xã liên quan)
- Tương tự như trên, cũng có một đống kết quả khi gõ đống đa*hà nội nhưng đống đa*gia lai thì chỉ có một
--------------------------------------------
Code còn chưa được "sáng" lắm, sẽ cải tiến tiếp!


Chào anh ndu96081631,
Tôi có 1 file form chuẩn của BHXH, thấy bài của anh giống như cái mà tôi đang cần.
VD:
1. ở các cột AG: khi tôi nhập 2 chữ cái đầu của tên tỉnh thì sẽ có list danh sách đổ xuống (ở sheet XA_HUYEN_TINH) với các tên tương ứng với 2 chữ cái đầu đó. Khi chọn đúng tên tỉnh thì sẽ lấy mã số ở cột D của sheet XA_HUYEN_TINH.
2. ở các cột AL, AN, AP, khi nhập từng chữ cái thì sẽ hiện ra list danh sách tương ứng (ở sheet XA_HUYEN_TINH) với từng chữ cái được nhập. Khi chọn xong thì sẽ lấy mã số ở cột B của sheet XA_HUYEN_TINH
Nhờ anh giúp cho cái code này với.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ừ thì sao cũng được!
Có nghĩa là mình biết là với cách bố trí dữ liệu như vậy, cách đặt mã như vậy... mình sẽ làm được tất cả mọi yêu cầu. Còn yêu cầu từng người dùng ra sao, có thể chỉnh sửa thoải mái
Có tình huống thế này:
- Anh bạn mới quen bảo rằng anh ấy ở Thuận An
- Tôi lại quên hỏi là Thuận An nào
- Tôi chỉ chắc rằng quê anh ấy không phải ở Miền Nam
- Vậy là tôi gõ từ khóa Thuận An vào form tìm kiếm, ra được kết quả thế này:

View attachment 190961

- Loại bỏ các vùng ở khu vực phía Nam, tôi có được 2 kết quả: Hoặc là thị trấn Thuận An ở Thừa Thiên Huế, hoặc là xã Thuận An ở Đắk Nông
Hợp lý chứ bộ!
Đương nhiên sắp tới đây, với cách đặt mã như thế, mình đã nghĩ đến sơ đồ dạng cây và đang tiến hành cải tiến
---------------------------------
Sửa lại 1 chút về cách gõ. Khỏi cần đánh dấu "*", chỉ cần các địa danh cách nhau bằng dấu phẩy là được
Ngồi buồn "vọc chơi":
- Gõ ku, lắk ---> ra một thúng
- Gõ lắk, ku ---> Hổng có cái nào
(kỳ vậy ta???)
Nhờ các Bạn giúp hiển thị thêm cột Mã vào listbox.
Mình áp dụng tìm Mã để điền vào bảng dữ liệu bằng cách sử dụng Lookup dò tìm theo Tỉnh - Huyện - Xã ( nhưng cột Xã thỉnh thoảng không ra kết quả theo ý muốn do nhiều xã trùng nhau ). Và cuối cùng là dùng Filter để dò Mã mình cần.
Xin cảm ơn.
 

File đính kèm

Upvote 0
Nhờ các Bạn giúp hiển thị thêm cột Mã vào listbox.
Mình áp dụng tìm Mã để điền vào bảng dữ liệu bằng cách sử dụng Lookup dò tìm theo Tỉnh - Huyện - Xã ( nhưng cột Xã thỉnh thoảng không ra kết quả theo ý muốn do nhiều xã trùng nhau ). Và cuối cùng là dùng Filter để dò Mã mình cần.
Xin cảm ơn.
Trong file, khi bạn gõ vào Textbox thì Listbox chưa cập nhật, mà phải Enter hoặc nhấp vào Listbox để được cập nhật. Do code trong Userform sử dụng sự kiện txtFindAddress_AfterUpdate(), nếu bạn muốn gõ gì để Listbox cập nhật, bạn sửa lại txtFindAddress_AfterUpdate() thành txtFindAddress_Change().
 
Upvote 0
Trong file, khi bạn gõ vào Textbox thì Listbox chưa cập nhật, mà phải Enter hoặc nhấp vào Listbox để được cập nhật. Do code trong Userform sử dụng sự kiện txtFindAddress_AfterUpdate(), nếu bạn muốn gõ gì để Listbox cập nhật, bạn sửa lại txtFindAddress_AfterUpdate() thành txtFindAddress_Change().
Cảm ơn Bạn đã giúp.
Ý của mình là muốn thêm cột Mã vào trong Listbox ( Trong Listbox hiện tại chỉ hiển thị cột Tỉnh Huyện Xã ) cho tiện việc cập nhật vào file dữ liệu ( mình chỉ cập nhật Mã - Nếu sau này cần thông tin mình sẽ tra Mã đấy ra Tỉnh - Huyện - Xã.
 
Upvote 0
Cảm ơn Bạn đã giúp.
Ý của mình là muốn thêm cột Mã vào trong Listbox ( Trong Listbox hiện tại chỉ hiển thị cột Tỉnh Huyện Xã ) cho tiện việc cập nhật vào file dữ liệu ( mình chỉ cập nhật Mã - Nếu sau này cần thông tin mình sẽ tra Mã đấy ra Tỉnh - Huyện - Xã.
Code của anh @ndu96081631 viết, bạn chờ anh ấy xuất hiện và hỗ trợ nhé.
Tôi chỉ viết mấy cái làng nhàng thôi, nếu bạn quan tâm listbox ngoài sheets, tham khảo bài này: Click
Có thể sửa lại và đưa vào UserForm.
 
Upvote 0
Upvote 0

Bài viết mới nhất

Back
Top Bottom