The Beginer
กระทู้เก่าบอร์ด อ.Yeadram

 3,296   20
URL.หัวข้อ / URL
The Beginer

กราบเรียนอาจารย์ทุกท่าน ขอคำแนะนำด้วยครับ
ผมสร้าง combo box จังหวัด ให้ค้นหาอำเภอใน List box แล้วใช้ List box นี้ ค้นหาชื่อถนนใน List box อีกที
List box "ถนน" นี้ ผม bound column ไว้ที่ 1 คือ "ถนน" และมี อำเภอกับจังหวัด เป็น column ไว้ที่ 2 และ 3 ตามลำดับ
ผมสร้าง ปุ่มเปิด report ไว้ โดยลิงค์ไว้กับ List box "ถนน" พอกดปุ่ม จะมีไดอะล็อกบอกซ์ขึ้นมาถามชื่อถนน พอคีย์ชื่อถนนตามใน List box ลงไปให้ ก็สามารถเปิด report ออกมาได้ถูกต้อง
อยากเรียนถามว่า ผมลิงค์ผิดตรงไหน? และต้องแก้ไขอย่างไร ให้กดปุ่มแล้ว เปิด report ได้โดยไม่ต้องคีย์ถนนลงในไดอะล็อก
ขอบคุณล่วงหน้าครับ

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

1 @R12997
ชื่อคอนโทรลที่แสดง ชื่อถนน คืออะไร (listRoadName)
ชื่อฟิลด์ในรายงาน ที่แสดงชื่อถนนคืออะไร (RoadName)

ในรายงาน ถ้าดึงมาจากคิวรี่ ในคิวรี่นั้น ถ้ามีการใส่พารามิเตอร์ ให้ระบุชื่อถนน ให้เอาพารามิเตอร์ออกไปเถอะครับ มันวุ่นวาย
ในปุ่มคำสั่งเปิดรายงานให้เขียนเงื่อนไข ใส่ใน where cluase ไปได้เลย
docmd.openreport "Report1",acpreview, , "[RoadName] Like '" & me.ListRoadName & "'"

แค่นี้ครับ

2 @R12998
คุณ yeadram เป็นผู้ตอบที่ดีนะครับ
ก่อน คุณ yeadram ตอบผมยังงง อยู่เลยว่า คำถามว่า "เปิด report โดยไม่ต้องคีย์ในไดอะล็อก" เนี่ย ผมกะจะตอบว่า "ก็เอา dialog ออกสิ...(ใส่มาทำไม)" 555 ^o^
3 @R12999
ขอบคุณอาจารย์ทั้งสองท่านครับ

ผมไม่ได้ใช้โค้ด แต่สร้างแมคโครให้ปุ่มเปิดรีปอร์ต โดยมีเนื้อหาเหมือนที่ อ.yeadram แนะนำครับ คือ "[RoadName] Like '" & me.ListRoadName & "'"
ในบันทัด "เงื่อนไข"
แต่ใน listRoadName ผมใส่พารามิเตอร์ของจังหวัดกับอำเภอ(ในคิวรี)ไว้ ๒ตัว เพื่อกรองให้ได้ชื่อถนนจาก "combo box จังหวัด" และ "List box อำเภอ" ส่วนฟิวด์ถนนในคิวรีไม่มีพารามิเตอร์ครับ (อ.yeadram ตอบราวกับเห็นคิวรีผมเลยนะครับ นับถือจริงๆ)
ตามที่ อ.yeadram แนะนำ จะเป็นเพราะพารามิเตอร์ ๒ตัวนี้หรือเปล่าครับ?

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

4 @R13003
เอาพารามิเตอร์ออกให้หมดเลยครับ
ใน บรรทัดเงื่อนไข ก็เพิ่มเงื่อนไขเข้าไป เป็น 3 อย่างเลยครับ โดยใช้ operator AND เข้าไปร่วมในเงื่อนไข เช่น

จงเลือกข้อมูลของจังหวัดสุรินทร์ อำเภอเมือง ถนนสุขาภิบาล1 มาแสดงผลในรายงาน1

docmd.openreport "report1", acviewpreview,, "Province Like '" & cbProvince & "' AND Amphur Like '" & cbAmphur & "' AND RoadName Like '" & ListRoadName & "'"
5 @R13010
กราบขอบพระคุณ อ.yeadram ที่กรุณาเข้ามาให้คำแนะนำครับ

ตอนนี้ปุ่มในฟอร์มสามารถเรียกรีปอร์ตขึ้นมาได้แล้วครับ (โดยไม่มีไดอะล็อกขึ้นมาถามค่า และผมก็ไม่ทราบว่า จู่ๆมันหายไปเองได้ยังไง ทั้งที่ทุกอย่างเหมือนเดิม)
ขออธิบายให้อาจารย์ทราบอีกครั้ง ดังนี้ครับ
ในเฮดเดอร์ของฟอร์ม ผมสร้าง "คอมโบบ็อกซ์จังหวัด" ให้หาอำเภอออกมาใน"ลิสท์บ็อกซ์อำเภอ" แล้วใช้ "ลิสท์บ็อกซ์อำเภอ" ไปหาชื่อถนนใน"ลิสท์บ็อกซ์ถนน" พอคลิกที่"ลิสท์บ็อกซ์ถนน" จะแสดงข้อมูลในซับฟอร์มข้างล่าง
"ลิสท์บ็อกซ์ถนน" กับ "ลิสท์บ็อกซ์อำเภอ" ขึ้นกับคิวรี และมีพารามิเตอร์

ส่วนรีปอร์ตที่เรียกขึ้นมา ในคิวรี(ที่แบ็กอยู่) ไม่ได้มีพารามิเตอร์ครับ
ทั้งหมดนี้ใช้คิวรี(ชื่อเดียว)ตัวเดียวกันครับ

อาจารย์ครับ ตอนนี้ ผมเปิดรีปอร์ตได้แล้วก็จริง แต่มีปัญหาใหม่ครับ
อาจารย์คงนึกภาพออกว่า ในต่างจังหวัดของไทยเรา บางอำเภอยังไม่มีถนน แต่มีทีอยู่
ในฟอร์มของผม พอสกรีนจังหวัด-อำเภอ-ถนนได้แล้ว พอคลิกใน "ลิสท์บ็อกซ์ถนน" ที่มีถนนเป็นเรคคอร์ดว่าง จะไม่แสดงข้อมูลในซับฟอร์ม(เป็นซับฟอร์มว่างเปล่า ทั้งที่ในตารางมีที่อยู่ของสมาชิก)
ไม่ทราบว่า ปัญหานี้เกี่ยวเนื่องกับที่พารามิเตอร์หรือเปล่า? และผมควรจะแก้ไขอย่างไรดี (ควรเขียนเงื่อนไขในโค้ดอย่างไร ให้แสดงข้อมูลออกมา)

ขอรวบกวนอาจารย์อีกครั้งครับ
ขอบคุณครับ

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

ผมใช้ Access2007 ครับ
7 @R13014
เดาไม่ออกว่าติดตรงขั้นไหนนะครับ เราต้อง debug เช็คไปละขั้นครับ
เช่น ในการกดปุ่ม ก็อย่าเพิ่งสั่งเรียกรายงาน ให้สั่งแสดงค่าข้อมูลมาก่อนครับ ว่าข้อมูลต่างที่เราจะใช้ส่งผ่านไปนั้น มันมาครบถ้วนหรือไม่ เช่น

Private Sub command1_click()
msgbox me.ListRoadName
' เพื่อตรวจสอบดูก่อนว่า ทุกครั้งที่เราคลิ๊กปุ่มนี้ ค่าของ ListRoadname ได้ค่ามาถูกต้องทุกครั้งหรือไม่

msgbox me.cbProvince
' เพื่อตรวสอบดูว่า combo ตัวทีใช้เลือกจังหวัดส่งค่ามาถูกต้องทุกครั้งที่กดปุ่มคำสั่งหรือไม่
' ให้ลองกดปุ่มหลายๆ ครั้ง โดยการเปลียนค่าต่างๆ ในคอมโบ หรือในลิสต์ดูลองเปลี่ยนค่าแล้วกดปุ่ม เช็คซ้ำหลายๆ ครั้งว่า ค่ามาถูกต้องทุกครั้งหรือไม่
' ถ้ามีคอนโทรลอื่นๆ อีกซึ่งจะมีการส่งค่าในคราวเดียวกัน ก็ให้ทำคล้ายๆ กันครับ เอาให้แน่ใจว่า ข้อมูลมาครบทุกๆ คอนโทรล
' ส่วนคำสั่งเปิดรายงาน ให้เบรคไว้ก่อนครับในขั้นตอนการเช็คนี้
' docmd.openreport .....
End Sub
* หมายเหตุ ผมไม่ค่อยคล่องเรื่อง macro เท่าไหร่นะครับ ถ้าคุณไม่คิดจะเขียนเป็นโค้ด แต่จะใช้ macro เป็นตัวเช็คค่าแทน ก็คงต้องหาคำสั่งเอาเอง ผมทำไม่เป็น

อนึ่ง หลังจากมั่นใจ หรือพบปัญหาจากการทดสอบข้างต้นและได้ทำการแก้ปัญหาข้างต้นจนเสร็จหมดแล้ว แต่ยังไม่สามารถเรียกรายงานได้ตรงตามต้องการอีก ลำดับต่อไปให้ไปตรวจสอบ ในรายงานครับ
1 ตรวจสอบแหล่งข้อมูลของรายงาน ว่ายังเป็นชื่อคิวรี่เดิมอยู่หรือไม่ ในทุกๆ ครั้งที่ มีการเรียกรายงาน
2 ตรวจสอบการอนุญาตใช้ตัวกรอง ว่าเราได้ตั้งค่าให้รายงานนั้น อนุญาตใช้ตัวกรองไว้แล้วหรือไม่
3 ตรวจสอบค่าที่ถูกส่งเข้ามา ว่าในแต่ละครั้งที่มีการคลิ๊กปุ่มคำสั่ง ค่าต่างๆ ได้ส่งเข้ามาเป็นสายอักขระที่ถูกต้องครบถ้วนหรือไม่ ซึ่งรวมไปถึงเครื่องหมายต่างๆ ในสายอักขระเหล่าน้นด้วย ว่ามี single quote หรือ equal หรือ sharp ครบถ้วนถูกต้องทุกๆ จุดหรือไม่

เมื่อตรวจสอบพบปัญหาก็แก้ไปทีละจุดครับ

โค้ดง่ายๆ สำหรับตรวจสอบ ณ ปลายทางของการส่งผ่านค่าครับ
private sub report_open
msgbox "source = " & me.recordsource
msgbox "อนุญาตกรอง = " & me.filteron
msgbox "การกรอง = " & me.filter
End sub
8 @R13015
ขอบคุณ อ.yeadram อีกครั้งครับ

คำแนะนำของอาจารย์ชัดเจนมากเลยครับ (แม้ว่าขณะนี้ ผมจะยังไม่รู้ว่ามันติดขัดที่ตรงไหน แต่แนวทางที่อาจารย์ให้มา ทำให้ผมเข้าใจได้ดีขึ้นมาก ผมจะนำไปลองทำดูครับ)

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

เดิมที ผมตั้งใจจะเขียนโค้ด แต่เนื่องจากยัีงไม่มีพื้น ผมเลยกะว่าจะหัดจาก macro ไปก่อนทีละสแต๊ป ตอนนี้ ผมคอนเวอร์ท macro เป็นโค้ดหมดแล้วครับ แล้วเอาไปผูกกับ control แทนที่ macro แล้ว (และเจอปัญหาที่เรียนมาแล้วข้างต้น)

ขอบคุณอาจารย์อีกครั้งครับ
9 @R13025
อ.yeadram และ อาจารย์ท่านอื่นๆครับ
ปัญหาข้างต้น ผมเคลียได้ตามที่ อ.yeadram แนะนำมาแล้ว ขอบคุณครับ
ยังคงเหลือปัญหาสุดท้าย
คือ ใน "ลิสท์บ็อกซ์ถนน" ที่มีถนนเป็นเรคคอร์ดว่าง จะไม่แสดงข้อมูลในซับฟอร์ม(เป็นซับฟอร์มว่างเปล่า ทั้งที่ในตารางมีที่อยู่ของสมาชิก หมายถึงที่อยู่มีเพียงจังหวัดกับอำเภอ ไม่มีถนน)
ผมจะทำอย่างไร ให้แสดงเรคอร์ดที่อยู่ออกมา
ผมใช้วิซาร์ดสร้างปุ่ม และได้โค้ดมาแบบนี้

Private Sub cmbTanon_AfterUpdate()
On Error GoTo cmbTanon_Err
    Me.RecordsetClone.FindFirst "[Tanon] = '" & Me![cmbTanon] & "'"
    Me.Bookmark = Me.RecordsetClone.Bookmark
cmbTanon_Exit:
    Exit Sub
เหตุผลเป็นเพราะว่า RecordsetClone ของ Tanon เป็นเรคอร์ดว่าง
จึงไม่แสดงผลออกมา ใช่ไหมครับ?
ผมควรเขียนโค้ดแก้ไขยังไงครับ
รบกวนช่วยแนะนำด้วยครับ
10 @R13026
ถ้าถนนเป็นค่าว่าง ก็อย่าให้คำสั่งชุดนี้ทำงานครับ
if Me![cmbTanon]<>"" or not isnull(Me![cmbTanon]) then
    Me.RecordsetClone.FindFirst "[Tanon] = '" & Me![cmbTanon] & "'"
    Me.Bookmark = Me.RecordsetClone.Bookmark
End if
11 @R13036
ขอบคุณ อ.yeadram ครับ
ผมเอาโค้ดที่อาจารย์แนะนำไปใส่ พอคลิก cmbTanon ไม่มีอะไรเกิดขึ้นครับ

ผมเลยแก้เป็น
If Me![cmbTanon] = "" Or IsNull(Me![cmbTanon]) Then
        Me.RecordsetClone.FindFirst "[JunaWat] = '" & Me![cmbJungWat] & "'" And "[AmPhur] = '" & Me![cmbAmPhur] & "'"
        Me.Bookmark = Me.RecordsetClone.Bookmark
    Else
        Me.RecordsetClone.FindFirst "[Tanon] = '" & Me![cmbTanon] & "'"
        Me.Bookmark = Me.RecordsetClone.Bookmark
    End If
พอคลิก cmbTanon ที่มีชื่อถนน ซับฟอร์มก็แสดงผลออกมาครับ
แต่พอคลิก cmbTanon ที่ไม่มีชื่อถนน เครื่องก็ฟ้องว่า "Type mismatch"
ไม่ทราบว่า ผมควรแก้ไขอย่างไรต่อไปครับ รบกวนอาจารย์ช่วยแนะนำด้วย

อีกเรื่องหนึ่ง เนื่องจากคำสั่ง RecordsetClone.FindFirst
พอคลิกที่ "ถนนเพชรเกษม(ชุมพร)" ซึ่ง "ถนนเพชรเกษม" ขึ้นกับ "อำเภอบางกอกใหญ่-ภาษีเจริญ-หลังสวน(ชุมพร)-สามพราน(นครปฐม) ฯลฯ" เครื่องจะแสดงเฉพาะ "ถนนเพชรเกษม(บางกอกใหญ่)"เท่านั้น ไม่ทราบว่าต้องแก้โค้ดตรงไหนครับ?

กราบขอบพระคุณล่วงหน้าครับ
12 @R13037
ขอบคุณ อ.yeadram ครับ
ผมเอาโค้ดที่อาจารย์แนะนำไปใส่ พอคลิก cmbTanon ไม่มีอะไรเกิดขึ้นครับ

ผมเลยแก้เป็น
If Me![cmbTanon] = "" Or IsNull(Me![cmbTanon]) Then
        Me.RecordsetClone.FindFirst "[JunaWat] = '" & Me![cmbJungWat] & "'" And "[AmPhur] = '" & Me![cmbAmPhur] & "'"
        Me.Bookmark = Me.RecordsetClone.Bookmark
    Else
        Me.RecordsetClone.FindFirst "[Tanon] = '" & Me![cmbTanon] & "'"
        Me.Bookmark = Me.RecordsetClone.Bookmark
    End If
พอคลิก cmbTanon ที่มีชื่อถนน ซับฟอร์มก็แสดงผลออกมาครับ
แต่พอคลิก cmbTanon ที่ไม่มีชื่อถนน เครื่องก็ฟ้องว่า "Type mismatch"
ไม่ทราบว่า ผมควรแก้ไขอย่างไรต่อไปครับ รบกวนอาจารย์ช่วยแนะนำด้วย

อีกเรื่องหนึ่ง เนื่องจากคำสั่ง RecordsetClone.FindFirst
พอคลิกที่ "ถนนเพชรเกษม(ชุมพร)" ซึ่ง "ถนนเพชรเกษม" ขึ้นกับ "อำเภอบางกอกใหญ่-ภาษีเจริญ-หลังสวน(ชุมพร)-สามพราน(นครปฐม) ฯลฯ" เครื่องจะแสดงเฉพาะ "ถนนเพชรเกษม(บางกอกใหญ่)"เท่านั้น ไม่ทราบว่าต้องแก้โค้ดตรงไหนครับ?

กราบขอบพระคุณล่วงหน้าครับ
13 @R13040
คำถามแรก ทำไมเกิด missmatch
.. คุณต่อสายอักขระที่จะทำเป็น criteria ของ findfirst ผิดครับ เครื่องหมายผิด คำว่า And ต้องส่งไปให้ findfirst นะครับ ไม่ใช่ของ VB
"[JunaWat] = '" & Me![cmbJungWat] & "' And [AmPhur] = '" & Me![cmbAmPhur] & "'"

คำถามที่สอง ทำไมขึ้นเฉพาะบางกอกใหญ่
อันนี้ไม่เข้าใจคำถามครับ
- ชนิดข้อมูลในคอมโบเป็นอะไร เป็น number หรือ string
- คุณต้องใช้ = หรือ Like เป็น operator ใน criteria
- คุณจำเป็นต้องใช้ wildcard ด้วยหรือเปล่า
- วงเล็บที่คุณโพสต์มา มีในเฉพาะที่นำมาโพสต์หรือว่ามีในฐานข้อมูลจริง
14 @R13042
ขอบคุณครับ อ.yeadram
แก้ตามอาจารย์ จาก
"[JunaWat] = '" & Me![cmbJungWat] & "'" And "[AmPhur] = '" & Me![cmbAmPhur] & "'"
เป็น
"[JunaWat] = '" & Me![cmbJungWat] & "'And [AmPhur] = '" & Me![cmbAmPhur] & "'" แล้ว
คราวนี้ เครื่องเกิด error "The Microsoft Office Access database engine does not recognize ‘JungWat’ as a valid field name or expression" อีก

สำหรับคำถามที่สอง
-ข้อมูลในคอมโบเป็น string ครับ เป็น Recordset จากคิวรีตัวเดียวกันที่แบ็กฟอร์ม/รีปอร์ตอยู่
-ใช้ "="ครับ อย่างในโค้ดที่เขียนมาข้างต้นครับ
-ผมไม่ได้ใช้ wildcard ครับ เพราะต้องกรองข้อมูลจากจังหวัด =>อำเภอ=>ถนน
-ในวงเล็บที่โพสมา มีในฐานข้อมูลจริงครับ    เป็นข้อมูลใน cmbTanon (Tanon.AnPhur.JungWat) ที่มาจากคิวรีครับ แต่มีพารามิเตอร์ให้กรองจังหวัด =>อำเภอ=>ถนนครับ (ถ้าเอาพารามิเตอร์ออก cmbJungWat => cmbAmPhur => cmbTanon จะไม่ทำงานครับ)

รบกวนอาจารย์ตั้งหลายครั้ง เกรงใจมากๆเลยครับ
ขอบพระคุณมากครับ
15 @R13046
คำถามแรก คุณพิมพ์ชื่อฟิลด์ผิดครับ

คำถามที่สอง ผมไม่เข้าใจที่คุณพูด แล้วคุณก็ไม่เข้าใจที่ผมถาม
คุณให้โปรแกรมช่วยหา เพชรเกษม(ชุมพร)
พอมันหามาได้ คุณก็บ่นว่ามันไม่ยอมแสดงผล เพชรเกษม(บางกอกใหญ่)

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

16 @R13048
ขอบคุณครับ อ.yeadram
Access นี่ ต้องละเอียดมากเลยนะครับ
คำตอบแรกที่อาจารย์ให้มา เข้าใจแล้วครับ ระหว่าง JunaWat กับ JungWat
(เหมือนคำตอบก่อนหน้า ที่อาจารย์พูดถึง " And "[AmPhur] กับ And [AmPhur])

ส่วนคำตอบที่สอง ขอรบกวนอาจารย์อีกครั้งครับ
คืออย่างนี้ครับ
พอผมเลือกชื่อ "ชุมพร" ใน cmbJungWat ได้อำเภอ "หลังสวน" ไปปรากฎอยู่ในลิสบ็อกซ์ cmbAmPhur
พอคลิก"หลังสวน" ในลิสบ็อกซ์ cmbAmPhur จะได้ "ถนนเพชรเกษม" ไปปรากฎในลิสบ็อกซ์ cmbTanon
พอคลิก"ถนนเพชรเกษม" ในลิสบ็อกซ์ cmbTanon เครื่องแสดงผลเป็น "ถนนเพชรเกษม อำเภอบางกอกใหญ่ กทม" ครับ ไม่แสดงผลเป็น "ถนนเพชรเกษม อำเภอหลังสวน จังหวัดชุมพร" ครับ
(ผมเช็กในตาราง พบว่า ถนนเพชรเกษม มีอำเภอบางกอกใหญ่นำหน้ามาก่อน และมีอำเภออื่นอีกหลายอำเภอ)
โค้ดที่เขียนไว้
        Me.RecordsetClone.FindFirst "[Tanon] = '" & Me![cmbTanon] & "'"
        Me.Bookmark = Me.RecordsetClone.Bookmark
ผมเข้าใจเอาเองว่า มีส่วนเกี่ยวข้องกับ FindFirst
ไม่ทราบว่าต้องแก้ไขโค้ดอย่างไรบ้างครับ

รบกวนอาจารย์อีกรอบครับ
ขอบคุณมากๆเลยครับ อาจารย์
ขอกราบขอบคุณย้อนต้อนทุกๆคำถามที่อาจารย์กรุณามาแนะให้ครับ
ทำให้ผม(อาจารย์จะรับเป็นลูกศิษย์ไหมครับ?)เข้าใจกระจ่างขึ้นมากเลยครับ
17 @R13051
อาจารย์ครับ
ปัญหายังคงค้างอยู่ ๒เรื่อง
๑.พอคลิก"ถนนเพชรเกษม อำเภอหลังสวน จังหวัดชุมพร" ในลิสบ็อกซ์ cmbTanon แล้วเครื่องแสดงผลออกมาไม่ตรง
๒.พอคลิก"ถนน" ที่เป็นข้อมูลว่างในลิสบ็อกซ์ cmbTanon แล้วเครื่องไม่แสดงผลออกมา

ไม่ทราบว่าเรื่อง ๒เรื่องนี้มาจากเหตุเดียวกัน หรือคนละเหตุครับ
รบกวนอาจารย์ช่วยชี้แนะด้วยครับ
ขอบคุณครับ
18 @R13052
คำถามที่ 1
Me.RecordsetClone.FindFirst "[Tanon] = '" & Me![cmbTanon] & "'"
ก็คุณให้มันหาแค่ชื่อถนน ไม่ได้ให้มันหาจังหวัดอำเภอด้วย มันก็มาทุกอำเภอทุกจังหวัดก็ถูกแล้วนี่ครับ

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

สรุปคือมันทำตามที่คุณสั่งทุกประการเลย ผมไม่เข้าใจว่ามันติดขัดตรงไหน
ยกเว้นคุณคิดอย่าง แล้วสั่งอย่าง ต้องย้อนไปทีความคิดของคุณว่า ต้องการสั่งอะไรกันแน่ครับ
19 @R13083
ขอบคุณครับ อาจารย์yeadram
ผมเข้าใจที่อาจารย์แจงมาครับ

ผมขอตั้งคำถามใหม่แล้วกันนะครับ
ข้างล่างนี้เป็นที่อยู่จริงของสมาชิก (ข้อมูลในตาราง หรือ คิวรี)
116/15 ซ.จรัญฯ 13 ถ. ต.วัดท่าพระ อ.บางกอกใหญ่ จ.กทม
551/101 ม.5 ซ. ถ. ต.จักราช อ.ผักไห่ จ.อยุธยา
27/113 มบ.ยั่งยืน ซ. ถ. ต.บางเมืองใหม่ อ.เมือง จ.สมุทรปราการ
670/330 ม.2 ซ. ถ. ต.หนองใหญ่ อ.หนองใหญ่ จ.ชลบุรี
30 ม.7 ซ. ถ. ต.วังใหม่ อ.ป่าบอน จ.พัทลุง

พอผมใช้วิธีกรองที่อยู่ด้วย cmbJungWat => ลิสบอกซ์cmbAmPhur => ลิสบอกซ์cmbTanon (ลิสบอร์กตัวนี้มีเรคอร์ดจังหวัด-อำเภอ-ถนน เป็น Tanon.Value1.Value2.Value3 [ไม่ทราบเขียนถูก syntex หรือเปล่า]) ผมจะได้ ถนน(ว่าง) อำเภอ(มีเรคคอร์ด) จังหวัด(มีเรคคอร์ด) ตามข้อมูลข้างต้น

พอผมคลิก เครื่องจะขึ้น error "Invalid use of null" (ตรงตามที่อาจารย์ว่า)

ผมอยากให้แสดงที่อยู่ที่ถูกต้อง(ไม่มีชื่อถนนออกมาด้วย)
ลองใช้วิธี
    If Me![cmbTanon] = "" Or IsNull(Me![cmbTanon]) Then
        Me.RecordsetClone.FindFirst "[JungWat] = '" & Me![cmbJungWat] & "'And [AmPhur] = '" & Me![cmbAmPhur] & " And [Tanon] = """ (ให้ถนนเป็นเรคคอร์ดว่าง) แต่ไม่ได้ผล
ผมแก้ใหม่เป็น
    If Me![cmbTanon] = "" Or IsNull(Me![cmbTanon]) Then
        Me.RecordsetClone.FindFirst "[JungWat] = '" & Me![cmbJungWat] & "'And [AmPhur] = '" & Me![cmbAmPhur] & "'" (โดยคิดว่า ถ้าให้แสดงเฉพาะจังหวัดกับอำเภอตามที่เลือก โดยไม่มีถนน ก็น่าจะใช้ได้) ก็ไม่ได้ผลอีก

ผมจึงใคร่ขอเรียนถามอาจารย์ว่า ถ้าจะให้แสดงที่อยู่ตามตารางหรือคิวรี ลิสบอกซ์cmbTanon ที่เลือกมาได้ ควรทำอย่างไรครับ?

หมายเหตุ * ฟิวด์ที่มีเรคคอร์ดครบ 3ตัว พอคลิก จะแสดง Subform ออกมาตรงตามต้องการ (ผมเช็คการส่งค่าตามที่อาจารย์แนะนำด้วย) จะมีปัญหาก็เฉพาะ "ถนน" ที่ไม่มีเรคคอร์ดนี่แหละครับ ที่ยังแก้ไม่ตก

ขอบคุณอาจารย์yeadram ล่วงหน้าครับ
ผมไปค้นกระทู้เก่าๆ ทราบว่าอาจารย์ก็ชอบคน"ครูพักลักจำ" ผมเป็นลูกศิษย์เช่นนั้นครับ
20 @R13084
เพิ่มเติมครับ อาจารย์
ผมเขียนโค้ดดักจับดูค่าที่ส่งตามนี้
Private Sub cmbTanon_AfterUpdate()
On Error GoTo cmbTanon_Err
       
    MsgBox Me.cmbTanon & " " & Me.cmbAmPhur & " " & Me.cmbJungWat

    If Me![cmbTanon] = "" Or IsNull(Me![cmbTanon]) Then
        Me.RecordsetClone.FindFirst "[JungWat] = '" & Me![cmbJungWat] & "'And [AmPhur] = '" & Me![cmbAmPhur] & ""
        Me.Bookmark = Me.RecordsetClone.Bookmark
    Else
        Me.RecordsetClone.FindFirst "[JungWat] = '" & Me![cmbJungWat] & "'And [AmPhur] = '" & Me![cmbAmPhur] & "'And [Tanon] = '" & Me![cmbTanon] & "'"
        Me.Bookmark = Me.RecordsetClone.Bookmark
    End If
    
cmbTanon_Exit:
    Exit SubMsgBox Me.cmbTanon & " " & Me.cmbAmPhur & " " & Me.cmbJungWat
MsgBox ส่งค่าออกมาถูกต้อง คือ ถนน"ว่าง" อำเภอ"ตามเลือก" จังหวัด"ตามเลือก" ตบท้ายด้วย "Syntex error in string in expression"

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