สมัครสมาชิก
 

วิธีเพิ่มภูมิภาค(ภาคเหนือ,กลาง,ใต้,ออก,ตก,อีสาน)เพื่อคัดกรองจังหวัด



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

15 ธ.ค. 61 , 12:45:15
อ่าน 890 ครั้ง

buakird

ผมได้ไฟล์ตัวอย่างพร้อมคำสั่ง VBA ในการทำแบบฟอร์มกรอกที่อยู่ที่สามารถเลือกรหัสไปรษณีย์ได้อัติโนมัติเมื่อพิมพ์ชื่อจังหวัด อำเภอ ตำบล เข้าไป  ผมนำไปปรับใช้การทำทะเบียนประวัติสมาชิกในหน่วยงาน  ได้ผลดีมากครับ  ทำงานได้รวดเร็วขึ้น  แต่ทางหัวหน้างานอยากให้เพิ่มช่องภูมิภาคถิ่นที่อยู่เข้าไปโดยอัตโนมัติเพื่อพิมพ์ชื่อจังหวัด  โดยในมีไฟล์ geo_id อยู่แล้วใน tb_province และ tb_district ผมไม่มีความรู้ทางด้าน VBA นัก ลองเขียนคำสั่งเพิ่มเข้าไปคำสั่งที่มีอยู่เดิม
แต่ไม่สำเร็จ  รบกวนช่วยนำทางให้ด้วยครับ ผมเพิ่มคอลัมน์ locate ในไฟล์ table1 แล้ว


คำสั่งเก่า...
Option Compare Database
Option Explicit

Private Sub Form_Load()
    Me.cb_province.RowSource = "SELECT tb_province.province_id, tb_province.Province_th FROM tb_province;"
    Me.cb_amphur.RowSource = "SELECT tb_amphur.amphur_id, tb_amphur.amphur_th FROM tb_province INNER JOIN tb_amphur ON tb_province.province_id = tb_amphur.province_id WHERE (((tb_province.Province_th)=[Forms]![Form1]![cb_province]));"
    Me.cb_district.RowSource = "SELECT tb_district.district_id, tb_district.district_th FROM tb_district INNER JOIN tb_amphur ON tb_district.amphur_id = tb_amphur.amphur_id WHERE (((tb_amphur.amphur_th)=[Forms]![Form1]![cb_amphur]));"
End Sub

Private Sub cb_province_Change()
    Me.cb_amphur.Requery
    Me.cb_amphur = Null
    Me.cb_district = Null
    Me.txt_zipcode = Null
End Sub

Private Sub cb_amphur_Change()
    Me.cb_district.Requery
    Me.cb_district = Null
    Me.txt_zipcode = Null
End Sub

Private Sub cb_district_Change()
    Me.txt_zipcode = DLookup("post_code", "tb_district", "district_th= '" & Me.cb_district & "' AND amphur_id = " & Me.cb_amphur.Column(0, Me.cb_amphur.ListIndex))
End Sub

Private Sub cb_amphur_GotFocus()
    Me.cb_amphur.Requery
End Sub

Private Sub cb_district_GotFocus()
    Me.cb_district.Requery
End Sub

 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

15 ธ.ค. 61 , 15:17:37
ตอบกลับ #1

ปิ่นณรงค์



ใช้วิธีการเดียวกับการแสดง  อำเภอ  ตำบล นั้นละครับ เมื่อเรากดเลือก Geo แล้วพอจะเลือกจังหวัด เราก็กำหนดให้เลือก Geo_ID จากCombobox  Cb_geography ที่เรากำหนด
วิธีการคือ
1.สร้าง Combobox เพิ่มตั้งชื่อว่า Cb_Geography โดยกำหนด RowSource ของ Cb_geography ดังนี้
โค๊ด: [Select]
SELECT tb_geography.GEO_ID, tb_geography.GEO_NAME FROM tb_geography;
2.ในส่วนของ Combobox Cb_Province ก็กำหนด Rowsource ดังนี้
โค๊ด: [Select]
SELECT tb_province.province_id, tb_province.Province_th, tb_province.GEO_ID FROM tb_province INNER JOIN tb_geography ON tb_province.geo_id = tb_geography.GEO_ID WHERE (((tb_province.GEO_ID)=[Forms]![Form1]![Cb_geography]));
ส่วน Code ให้แก้เป็นแบบนี้ครับ
โค๊ด: [Select]
Option Compare Database
Option Explicit

Private Sub Cb_geography_AfterUpdate()
    Me.cb_province.Requery
    Me.cb_province = Null
    Me.cb_amphur = Null
    Me.cb_district = Null
    Me.txt_zipcode = Null
End Sub

Private Sub cb_province_AfterUpdate()
    Me.cb_amphur.Requery
    Me.cb_amphur = Null
    Me.cb_district = Null
    Me.txt_zipcode = Null
End Sub
Private Sub cb_province_GotFocus()
Me.cb_province.Requery
End Sub

Private Sub cb_amphur_AfterUpdate()
    Me.cb_district.Requery
    Me.cb_district = Null
    Me.txt_zipcode = Null
End Sub
Private Sub cb_district_AfterUpdate()
    Me.txt_zipcode = DLookup("post_code", "tb_district", "district_th= '" & Me.cb_district & "' AND amphur_id = " & Me.cb_amphur.Column(0, Me.cb_amphur.ListIndex))
End Sub

Private Sub cb_amphur_GotFocus()
    Me.cb_amphur.Requery
End Sub
Private Sub cb_district_GotFocus()
    Me.cb_district.Requery
End Sub
Private Sub Form_Load()
Me.Cb_geography.SetFocus
End Sub

สามารถดูตัวอย่างที่แก้ไข ด้านล่างครับ
« แก้ไขครั้งสุดท้าย: 17 ธ.ค. 61 , 08:59:19 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี, buakird, oraaoi

19 ธ.ค. 61 , 11:20:44
ตอบกลับ #2

buakird

ขอบพระคุณมากครับ...ขออนุญาตถามต่ออีกนิดครับ
ถ้าผมไม่ต้องการให้ช่องภูมิภาคเป็นช่องหลัก...ที่จะนำไปสู่การเลือกช่องจังหวัด  แต่ผมอยากได้ช่องภูมิภาคเป็นช่องผลพลอยได้จากเลือกจังหวัด คือ พอเลือกจังหวัดเสร็จ ช่องภูมิภาคขึ้นมาพร้อมๆกันเลย พอเป็นไปได้มั๊ยครับ  ขอบพระคุณครับ

 

19 ธ.ค. 61 , 14:48:24
ตอบกลับ #3

UnKnown

อ้างถึง
ไม่ให้ช่องภูมิภาคเป็นช่องหลัก , เลือกจังหวัดเสร็จ > ช่องภูมิภาคขึ้นมาให้เลย
ผมขออนุญาตนำไฟล์ของ อ.ปิ่นณรงค์ ไปแก้นะครับ โดย
• เปลี่ยนช่องเลือกภาค(Cb_geography) เป็น TextBox
• จังหวัด
  - column count = 3 , column widths = 0cm;2cm;0cm
  - Data > Row Source =
โค๊ด: [Select]
SELECT tb_province.province_id, tb_province.Province_th, tb_geography.GEO_NAME FROM tb_province INNER JOIN tb_geography ON tb_province.geo_id = tb_geography.GEO_ID;
  - VB ในส่วนของ cb_province_AfterUpdate เพิ่ม     
โค๊ด: [Select]
Me.Cb_geography = cb_province.Column(2)
ปล.ผมก็...เอาอ่านะลองดูจากไฟล์เลยครับ :prettiness:

 
โพสต์นี้ได้รับคำขอบคุณจาก: ปิ่นณรงค์, buakird

19 ธ.ค. 61 , 15:15:59
ตอบกลับ #4

buakird

ขอบพระคุณมากครับ.. :smile:

 

22 ธ.ค. 61 , 11:24:48
ตอบกลับ #5

buakird

รบกวนเพิ่มเติมครับ...
ได้นำคำแนะนำทั้งหมดมาลงทำงานในตารางโดยผ่านฟอร์ม...ปรากกฏว่า..ฟอร์มกับตารางไม่ค่อยจะสัมพันธ์กัน...พิมพ์ข้อมูลบนฟอร์มแต่ไม่ปรากฏในตารางต้องปิดตารางแล้วเปิดมาใหม่จึงจะปรากฏข้อมูล...ไม่ทราบผิดพลาดตรงไหนครับ

 

05 ม.ค. 62 , 11:17:23
ตอบกลับ #6

UnKnown

: ช่วยแนะนำการเขียนคำสั่ง VBA ใน Acess
« ตอบกลับ #6 เมื่อ: 05 ม.ค. 62 , 11:17:23 »
รบกวนเพิ่มเติมครับ...
ได้นำคำแนะนำทั้งหมดมาลงทำงานในตารางโดยผ่านฟอร์ม...ปรากกฏว่า..ฟอร์มกับตารางไม่ค่อยจะสัมพันธ์กัน...พิมพ์ข้อมูลบนฟอร์มแต่ไม่ปรากฏในตารางต้องปิดตารางแล้วเปิดมาใหม่จึงจะปรากฏข้อมูล...ไม่ทราบผิดพลาดตรงไหนครับ

ติดตามต่อได้ที่กระทู้นี้เน้อ > การบันทึกข้อมูลลงตารางจากการใช้แบบฟอร์ม

 

08 มิ.ย. 62 , 13:02:53
ตอบกลับ #7

buakird

เรียน อ.ปิ่นณรงค์
(อ้างถึง คำแนะนำของอาจารย์ เมื่อ 15 ธันวาคม 2561 เรื่อง การเขียนคำสั่ง VBA ใน Acess เกี่ยวกับการเพิ่มฟิลด์ภูมิภาค เข้ามาร่วมในระเบียน)
   ผมได้ปรับคำแนะแนำของอาจารย์  ไปสร้างตารางใหม่ขึ้นมา  ใส่ฟิลด์หน่วยงาน  ที่อยู่  ภูมิภาค ตำบล  อำเภอ จังหวัด รหัสไปรษณีย์ เข้าไป โดยเลียนแบบการเขียนคำสั่งของอาจารย์ทั้งหมด
แต่ปรากฏว่า เวลาทดลอง รันฟอร์ม ช่องภูมิภาค ช่องจังหวัด ในตารางไม่ขึ้นชื่อ แต่ขึ้นเป็นตัวเลขแทน ทำใหม่หลายรอบ ก็ไม่สำเร็จ  ขอคำแนะนำด้วยครับ  ไม่ทราบเส้นผมบังภูเขาหรือเปล่า
รบกวนอีกรอบครับ

 

08 มิ.ย. 62 , 15:11:24
ตอบกลับ #8

UnKnown

--> ขอไฟล์ของท่านมาดูได้หรือไม่ :question:

ท่านเอาไปใช้งานแนวไหนครับ
-> ใว้เพื่อใช้เพิ่มรายชื่อหน่วยงาน
-> ใว้เมื่อเลือกหน่วยงานแล้วกรองตัวเลือกออกมา เช่น กรมป่าไม้ > จังหวัด > อำเภอ > ตำบล > ที่อยู่ > ...

ลองแก้ตัวเลขในช่อง Bound Column หรือยังครับ


New ไฟล์ตัวอย่างที่ผมใช้เพิ่มชื่อที่อยู่ลูกค้า และเรียกมาดูครับ(ต้นฉบับผมเรียกมาใช้งาน)
« แก้ไขครั้งสุดท้าย: 08 มิ.ย. 62 , 18:40:01 โดย UnKnown »

 
โพสต์นี้ได้รับคำขอบคุณจาก: buakird, apirak

10 มิ.ย. 62 , 08:00:05
ตอบกลับ #9

ปิ่นณรงค์

ถ้าจะเก็บข้อมูลลงในตารางเป็น ID ของ ตารางนั้นก็คงจะเหมาะครับ เพราะใช้ทรัพยากรน้อยลง
ถ้าคุณกำหนดข้อมูลแถวของ Combobox เป็น คอลัมน์1 ID คอลัมน์2 ชื่อจังหวัดหรือตำบลหรืออำเภอ
ตรง column width(ความกว้างของคอลัมน์) กำหนดซัก 0ซม.;5ซม. หรือตัวเลขอื่นๆ เพื่อให้แสดงรายการได้ครบ


column width กำหนดซัก 0ซม.;5ซม. คือ Combobox คอลัมน์ไหน กำหนดเป็น 0 จะไม่แสดงคอลัมน์นั้น จากการกำหนดนี้ข้อมูลจะถูกเก็บข้อมูล ID แต่จะแสดง รายการของคอมโบบ๊อกนั้นแทน
ส่วน BoundColumn(คอลัมน์ที่ถูกผูกไว้)ถ้าอยากจะเก็บข้อมูลเป็น ID กำหนดเป็น 1 ถ้าจะเก็บเป็นตัวหนังสือหรือรายการกำหนดเป็น 2 หรือดูจากการกำหนดชนิดแหล่งข้อมูลแถวว่าต้องการผูกคอลัมน์ไหนไว้ครับ

« แก้ไขครั้งสุดท้าย: 10 มิ.ย. 62 , 08:09:22 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: buakird, apirak

12 มิ.ย. 62 , 15:28:42
ตอบกลับ #10

ปิ่นณรงค์

ส่งไฟล์ ที่กำลังสร้างอยู่มาดูหน่อยครับ ทาง Inbox ก็ได้ ติดปัญญาตรงไหนบอกได้เลยครับไม่ต้องเกรงใจ
เดี่ยวจะบอกสาเหตุของ Error นั้นให้ด้วย จะได้แก้ไขได้ในครั้งต่อไป

ถ้าท่านติดปัญหาตรงไหน โพสสอบถามไว้ได้เลยครับ มีอาจารย์หลายๆท่านคอยช่วยตอบให้ท่านแน่นอนครับ
ส่วนจากตัวอย่าง เดิมที่ส่งมาผมปรับปรุงใหม่ ให้อ้างอิง ID ของแต่ละตารางแทนแล้วนะครับ โดยผมได้แก้จากการอ้างอิงที่เป็นภาษาไทย เป็นอ้างอิงจาก ID นะครับลองดูครับ
« แก้ไขครั้งสุดท้าย: 12 มิ.ย. 62 , 15:43:47 โดย ปิ่นณรงค์ »
:love: :grin:
 

13 มิ.ย. 62 , 10:47:00
ตอบกลับ #11

buakird

กราบขอบพระคุณครับที่ยังให้ความช่วยเหลือ...ผมเอาไฟล์ของอาจารย์มาดำเนินการต่อโดยสร้างตารางขึ้นมาใหม่  มี ID ชื่อหน่วยงาน ที่อยู่ ภูมิภาค จังหวัด อำเภอ ตำบล รหัสไปรษณีย์
ปรับปรุงฟอร์มของอาจารย์ใหม่   เติมแถวควบคุมเข้าไปทุกช่องตั้งแต่ ภูมิภาค จังหวัด อำเภอ ตำบล ทดลองรันดู  ปรากฏว่า ภูมิภาค ทำงาน แต่พอมาเลือกช่องจังหวัดก็เกิดปัญหาตามรูปที่ส่งมาครับ มี massage แจ้งประมาณว่า ใช้นิพจน์ไม่ถูก ทั้งที่ตรงจุดข้อมูลแถว ก็ใช้คำสั่งเดิมของอาจารย์
  SELECT tb_province.province_id, tb_province.Province_th, tb_province.GEO_ID FROM tb_province INNER JOIN tb_geography ON tb_province.geo_id = tb_geography.GEO_ID WHERE (((tb_province.GEO_ID)=[Forms]![Form1]![Cb_geography]));


ไฟล์ทำงานแนบมาให้แล้วครับ

 

13 มิ.ย. 62 , 10:59:41
ตอบกลับ #12

UnKnown

ปัญหาของท่านที่ภูมิภาค(GEOGRAPHY) แก้ BoundColumn = 1

แต่ถ้าต้องการให้เก็บภูมิภาคเป็นชื่อ GEOGRAPHY คง BoundColumn = 2 ใว้
มาแก้ Rowsource ของจังหวัดเป็น
โค๊ด: [Select]
SELECT tb_province.province_id, tb_province.Province_th, tb_geography.GEO_NAME FROM tb_province INNER JOIN tb_geography ON tb_province.geo_id = tb_geography.GEO_ID WHERE (((tb_geography.GEO_NAME)=[Forms]![Form1]![Cb_geography]));

อธิบายคือจากการที่เราสั่งให้ภูมิภาคบันทึกเป็นชื่อนั้น > ในส่วนของจังหวัดเราจึงต้องไปสั่งเปลี่ยนรูปแบบค่าที่รับมาด้วยนะครับ
« แก้ไขครั้งสุดท้าย: 13 มิ.ย. 62 , 11:18:12 โดย UnKnown »

 
โพสต์นี้ได้รับคำขอบคุณจาก: buakird


บอร์ดเรียนรู้ Access สำหรับคนไทย