การสร้างฟอร์ย่อย
กระทู้เก่าบอร์ด อ.Yeadram

 1,276   5
URL.หัวข้อ / URL
การสร้างฟอร์ย่อย

เกริ่นก่อนเลยนะคะ คือ เราสร้างฟอร์มค้นหา โดยสร้างฟอร์ม 2 ฟอร์ม
1.ฟอร์มหลัก ใช้สำหรับค้นหา ชื่อ "F_REAL_MODEL_1"
2.ฟอร์มย่อย เป็นฟอร์มที่ใช้แสดง Detail หลังการกดปุ่มค้นหา ชื่อ "F_REAL_MODEL"

ตอนนี้สามารถกดปุ่มค้นหาได้แล้วก็ แสดงผลเรียบร้อยแล้วคะ แต่....

คำถาม : เราอยากให้ Form ย่อย แสดงข้อมูลก่อน กด SERCH ได้ไหมคะต้องทำยังไงเอ่ย?

ที่มาของ Form :
1.Form หลัก "F_REAL_MODEL_1" เป็น Formเปล่าที่เราสร้างขึ้นมาเพื่อ Search อย่างเดียวเลยค่ะ โดย....ที่ปุ่ม command search เราใส่โค้ดนี้ลงไปค่ะ
**************
Private Sub Command3_Click()
    Me.F_REAL_MODEL.Requery
End Sub
**************

2.Form ย่อย "F_REAL_MODEL" เป็น Form ที่สร้างมาจาก Query
ชื่อ " Q_REAL_MODEL" โดยเราใส่พารามิเตอร์ตรงฟิลด์ CODE ดังนี้ค่ะ

**************
Between[Forms]![F_REAL_MODEL_1]![Text1] And [Forms]![F_REAL_MODEL_1]![Text4]
**************

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

[>:D]


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

1 @R20143
หมายถึงตอนที่ช่อง Text1 กับ Text4 ว่าง ให้แสดงข้อมูลทั้งหมดใช่ป่าวครับ
ถ้าใช่มันทำได้หลายวิธีนะครับ

วิธีที่ที่คิดออกตอนนี้...ใช้ nz() ช่วยได้ครับ คือ ถ้าไม่มีข้อมูลใน Textbox ให้ไปหาค่ามากสุดกับน้อยสุดมาใส่แทน

Between Nz([Forms]![F_REAL_MODEL_1]![Text1],DMin("CODE","[ชื่อตาราง]")) And Nz([Forms]![F_REAL_MODEL_1]![Text4],DMax("CODE","[ชื่อตาราง]"))

ประมาณนี้ครับ

หรืออีกวิธี คือใช้ Property ในฟอร์มแทนเลย
- ยกเลิกเงือนไข พารามิเตอร์ตรงฟิลด์ CODE
- ที่ปุ่ม ค้นหา ที่จากเดิมใส่โค๊ต

Private Sub Command3_Click()
    Me.F_REAL_MODEL.Requery
End Sub

เพิ่มโค๊ดเป็น

Private Sub Command3_Click()
    If IsNull(Me.Text1) And IsNull(Me.Text4) Then
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.FilterOn = False
        Exit Sub
    ElseIf Not IsNull(Me.Text1) And IsNull(Me.Text4) Then
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.Filter = "CODE Between [Forms]![F_REAL_MODEL_1]![Text1] And " & DMax("CODE", "[ชื่อตาราง]")
    ElseIf IsNull(Me.Text1) And Not IsNull(Me.Text4) Then
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.Filter = "CODE Between " & DMin("CODE", "[ชื่อตาราง]") & " And [Forms]![F_REAL_MODEL_1]![Text4]"
    Else
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.Filter = "CODE Between [Forms]![F_REAL_MODEL_1]![Text1] And [Forms]![F_REAL_MODEL_1]![Text4]"
    End If
    Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.FilterOn = True

    Me.F_REAL_MODEL.Requery
End Sub

ปรับใช้ดูก่อนครับ รอท่านอื่นๆ
2 @R20144
ขอบคุณมากเลยค่าาาคุณ TTT
ลองเพิ่มเติมโค้ดแบบวิธีที่ 2 ใช้ได้แล้วค่า
เราลองหาอ่านใน เว็ปthai-access ดูแล้วแต่หาไม่เจอเลย
ต้องขอบคุณมากๆที่มาตอบค่ะ :)

ปล.เว็ปนี้มีประโยชน์มากๆเลยค่ะ [>:D]
3 @R20280
ขอโทษนะค้า คุณ "TTT" พอดีมีคำถามต่ออ่าค่ะ จากหัวข้อเดิม
ลองทำตามวิธีที่ 2 ได้ผลเรียบร้อยแล้วค่ะ ผลคือมีข้อมูลแสดงก่อนการ SEARCH ค่ะ ขอบคุณมากๆเลย

คำถามใหม่คือ :: จากเดิมที่ใช้ TEXTBOX จำนวน 2 TEXTBOX ในการ SEARCH เปลี่ยนเป็น

1.กรณีที่ใช้ TEXTBOX จำนวน 1 TEXTBOX ในการ SEARCH ควรจะเขียนโค้ด VB ในปุ่ม COMMAND ยังไงได้บ้างคะ
2.กรณีที่ใช้ COMBO BOX ในการ SEARCH ในการ SEARCH ควรจะเขียนโค้ดที่ไหนได้บ้างคะ

"ขอโทษนะค้า พยายามหาวิธีแล้ว แต่ทำไม่ได้อ่าค่า "
4 @R20285
1.กรณีที่ใช้ TEXTBOX จำนวน 1 TEXTBOX ในการ SEARCH ควรจะเขียนโค้ด VB ในปุ่ม COMMAND ยังไงได้บ้างคะ

- เปลี่นจาก Between เป็น = เขียนประมาณนี้ครับ

   If IsNull(Me.Text1) Then
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.FilterOn = False
        Exit Sub
    Else
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.Filter = "CODE = [Forms]![F_REAL_MODEL_1]![Text1]"
    End If
    Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.FilterOn = True
    Me.F_REAL_MODEL.Requery

หรือเป็น Like เพื่อหาทุกค่าที่มีอักษรนั้น

Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.Filter = "CODE Like " & "'*" & [Forms]![F_REAL_MODEL_1]![Text1] & "*'"

เช่นถ้าหากเราหาค่า 1
หากใช์ = 1 > จะกรองเรคคอร์ดที่ฟิลด์ CODE เป็น 1 เท่านั้น
หากใช้ Like *1* > จะกรองเรคคอร์ดที่ฟิลด์ CODE เป็น 1, 11, 12, 101 ... คือค่าอะไรก็ตามที่มี 1 อยู่ด้วย
อะไรประมาณนี้

2.กรณีที่ใช้ COMBO BOX ในการ SEARCH ในการ SEARCH ควรจะเขียนโค้ดที่ไหนได้บ้างคะ

- ก็ใช้ลักษณะเดียวกันครับ เพียงแต่ต้องดูว่าเรากำหนด Combo box เป็นอย่างไรด้วย เช่น หากมีหลายคอลัมน์ ก็ต้องดูว่าใน Property: Data > Bound Column กำหนดให้ส่งค่าที่คอลัมน์ไหน

- และส่วนมากหากเป็น combo box เค้าก็มักจะให้เลือกเสร็จก็กรองเลย ไม่ต้องทำปุ่ม ดังนั้นมักไปใส่ใน Event > After Update ของ Combo Box ตัวนั้น

   If IsNull(Me.Combo1) Then
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.FilterOn = False
    Else
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.Filter = "CODE Like " & "'*" & [Forms]![F_REAL_MODEL_1]![Combo1] & "*'"
        Forms![F_REAL_MODEL_1]![F_REAL_MODEL].Form.FilterOn = True
        Me.F_REAL_MODEL.Requery
    End If

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