ช่วยดูให้หน่อยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,504   7
URL.หัวข้อ / URL
ช่วยดูให้หน่อยครับ

ใน table TB_Farmers หลังจากบันทึกข้อมูลใน Form แล้ว ข้อมูลที่ฟิลด์ ของ
จังหวัด อำเภอ ตำบล มันเป็นแสดงเป็น Code ครับ
เช่น "62" ข้อมูลที่ต้องการให้แสดงคือ "กำแพงเพชร"

ช่วยดูให้หน่อยครับ


ในฟอร์มบันทึกข้อมูล

comboจังหวัด , Control Source=Province (ใน TB_Farmers)

Row Source
SELECT [CodeProvince].[ProvinceCode], [CodeProvince].[Province] FROM CodeProvince ORDER BY [Province];

comboอำเภอ , Control Source=Amphur (ใน TB_Farmers)

Row Source
SELECT [CodeAmphur].[AMPHURCODE], [CodeAmphur].[AMPHUR] FROM CodeAmphur ORDER BY [AMPHUR];

comboตำบล , Control Source=Tambon (ใน TB_Farmers)

Row Source
SELECT [CodeTumbol].[TUMBOLCODE], [CodeTumbol].[TUMBOL] FROM CodeTumbol ORDER BY [TUMBOL];

ข้อมูลใน table ของ จังหวัด อำเภอ ตำบล

จังหวัด 2 ฟิลด์
ProvinceCode
Province

อำเภอ 4 ฟิลด์
AMPHURCODE
AMPHUR
PROVINCECODE
PROVINCE

ตำบล 6 ฟิลด์
TUMBOLCODE
TUMBOL
AMPHURCODE
PROVINCECODE
Amphur
Province

7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R13198
ตารางตำบล จะใส่จังหวัดไปทำไม จะใส่อำเภอไปอีกทำไมละครับ
ถ้าใส่จริงๆ ตารางอำเภอ กับตารางจังหวัดก็หมดหน้าที่ งั้นก็ลบมันทิ้งเลย

การจัดการฐานข้อมูล คือการขจัดความซ้ำซ้อน แต่ที่คุณทำ คือพยายามจะให้มันซ้ำซ้อนกันเข้าไปใหญ่อีก

"เราจะจัดการกับความซับซ้อน ไม่ให้มันซ้ำซ้อน" จำไว้ครับนั่นคือสโลแกนนักจัดการข้อมูลอย่างเราๆ

ตารางอำเภอ เอาไว้แต่ ProvinceCode ส่วนฟิลด์ Province ลบทิ้งซะ
ตารางตำบล เอาไว้ provinceCode, Amphurcode ส่วนฟิลด์ Amphur กับ Province ลบทิ้งซะ

การออกแบบคอมโบ ถ้ามี source หลายคอลัมน์ ต้องระบุในคุณสมบัติของคอมโบ เพื่อบอกมันด้วย ว่ามีข้อมูลกี่คอลัมน์
และถ้ามีหลายคอลัมน์ แต่ความเป็นจริง มันเลือกแสดงผลที่หน้าจอได้ไม่จำเป็นต้องแสดงทุกคอลัมน์ ดังนั้น ต้องบอกมันด้วยว่า จะให้แสดงคอลัมน์อะไรบ้าง

- สมมติว่าคุณมีข้อมูล 4 คอลัมน์
Column count =4
- ต้องการให้ เมื่อมีการเลือก ให้เก็บข้อมูล คอลัมน์แรก เข้าเก็บในตาราง (ส่วนคอลัมน์อื่น เราเอามาเพื่อให้ผู้ใช้ดูเท่านั้น ไม่ได้คิดจะเก็บมันเข้าตาราง)
ให้ตั้งค่า
Boundcolumn =1
- เวลาผู้ใช้กด Dropdown ให้แสดงแค่ 3 คอลัมน์ โดยซ่อนคอลัมน์ที่สองไว้
column width = 2;0;2;2
(การซ่อนก็คือการกำหนดความกว้างคอลัมน์นั้นๆ ให้เป็น 0)
- ส่วนเวลาที่ไม่มีคนกด Dropdown มันจะแสดงคอลัมน์แรก ที่ไม่ได้ถูกซ่อนเสมอ
2 @R13201
ขอบคุณครับ อาจารย์ เหยียดรัมย์ จะลองดูครับ
3 @R13213



แก้ไขตามที่ อ.yeadram แนะนำครับ
4 @R13214
ผมจะแก้โค้ดนี้ยังไงครับ จากที่แก้ไขตารางครับ

Private Sub Province_AfterUpdate()

Amphur.RowSource = "Select * From [CodeAmphur] where ([PROVINC[CODE] Like '" & Province & "')"
Amphur.Requery

End Sub

Private Sub Amphur_AfterUpdate()

Tambon.RowSource = "Select * From [CodeTumbol] where ([AMPHURCODE] Like '" & Amphur & "')"
Tambon.Requery

End Sub

ของเก่าครับ
5 @R13216
Private sub cbProvince_Change()
cbAmphur.Rowsource = "Select AmphurCode, Amphur From CodeAmphur Where ProvinceCode = " & cbProvince
cbAmphur.Requery
cbTambon.Rowsource="Select TambonCode, Tambon From CodeTambon Where ProvinceCode = " & cbProvince
cbTambon.Requery
End sub

Private Sub Amphur_Change()
cbTambon.Rowsource = "Select TambonCode, Tambon From CodeTambon Where AmphurCode = " & cbAmphur
cbTambon.Requery
End sub


1   เปลี่ยนไปฝังโค้ดในเหตุการณ์ onchange เหมาะสำหรับ คอมโบ
2   อย่าตั้งชื่อคอนโทรล เป็นคำเดียวกันกับชือฟิลด์ มันจะลำบากในการเขียนโค้ด แม้ว่า ระบบวิซาร์ดมันอาจจะช่วยสร้างมาอย่างนั้น คุณก็แค่ไปตามไปเพิ่มตัวอักษระสักตัวสองตัวนำหน้าชื่อคอนโทรล เพื่อไม่ให้มันซ้ำกันกับชื่อฟิลด์
ถ้าคุณสั่ง Amphur.Requery   ในบางจังหวะ VBA มันเอ๋อๆ มันจะ Error เพราะแทนที่มันจะสั่งคอนโทรล มันดันไปสั่ง ฟิลด์ (เมธอด requery ไม่ค่อยมีปัญหาหรอกครับ ผมยกตัวอย่างเฉยๆ จริงยังมีอีกหลายเมธอด อีกหลายพร็อพเพอตี้ที่จะมีปัญหา หากชื่อคอนโทรลกับชื่อฟิลด์มันตรงกัน เราสั่งการไปแล้วมัน งง ตกลงจะสั่งการกับฟิลด์ หรือคอนโทรล)
3 การระบุแหล่งข้อมูลให้คอมโบ (Rowsource) ควรระบุชื่อฟิลด์ลงไปเลย ว่าจะเอาฟิลด์อะไรบ้าง เอาฟิล์ดไหนขึ้นก่อนขึ้นหลัง มิฉะนั้น จะต้องมีคำถามอีกว่า ทำไมคอลัมน์นี้มา คอลัมน์นี้หลบ คอลัมน์นี้กว้างเกิน คอลัมน์นี้แคบเกิน เอาข้อมูลผิดประเภทลงตาราง คอลัมน์ 2 สลับตำแหน่งกันกับคอลัมน์ 3 ฯลฯ
4 ถ้าพวกฟิลด์ Code ของคุณมันเป็น ตัวเลข มันเป็นชนิด Number ใช้เครื่องหมายกระทำ (Operator) เป็นเครื่องหมายเท่ากับไปเลยครับ ไม่ต้องใช้ Like หรือ การประมวลผล การสืบค้น โดย Number มันเร็วกว่า String เยอะครับ

6 @R13221
อ.yeadram สอนเคลียมากเลยครับ
คำถามคุณกรวิชญ์ คลายกับที่ผมถาม อ.yeadram มาเลยครับ
ของ อ.yeadram เขียนโค้ดโดยตรง สะดวกกว่าของผม
ผมใช้คิวรีแบ็กคอมโบบ็อก
7 @R13230
ขอบคุณมากครับ อ.yeadram ตอนนี้ทำได้แล้วครับ!
เปลี่ยนชื่อ คอนโทรล ตามคำแนะนำ ครับ ตอนแรก พอนำโค้ดของ อ.yeadram ไปใช้โดยเปลี่ยนชื่อ คอนโทรล ใหม่ครับ พอเลือก จังหวัด ... อำเภอไม่มีตัวเลือกให้เลยครับว่างเปล่า ที่ไหนได้ผมกำหนด ชนิดข้อมูล Code เป็น text พอเปลี่ยนเป็น number ก็ผ่านฉลุยครับ ก็มันไม่เคยเขียนนิครับ เรื่องง่ายๆ ทำเป็นเรื่องยากเลยทีเดียว

จากคำแนะนำของ อ.yeadram ผมนำความรู้ที่ได้ไปใช้กับอีกหลายฟอร์มเลยครับ


ขอบคุณอีกครั้งครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1932s