ช่วยดูหน่อยค่ะว่าเขียน Code ผิดตรงไหน
กระทู้เก่าบอร์ด อ.Yeadram

 1,792   9
URL.หัวข้อ / URL
ช่วยดูหน่อยค่ะว่าเขียน Code ผิดตรงไหน

กำลังสร้าง From ที่เป็น Combo Box ค่ะ เงื่อนไข
Combo 0 แสดงนามสกุลจาก Field SurName
Combo 2   แสดงชื่อใน Field GrandNameที่เป็น Sub ของนามสกุลนั้น ในCombo o
Combo 4 แสดงชื่อใน Field ParentsNameที่เป็น เป็น Sub ของ GrandNameใน Combo2
Combo 6 แสดงชื่อใน Field ChildName ที่เป็น Sub ของ ParentsName ใน Combo4
Combo 8 แสดงชื่อใน Field NNName ที่เป็น Sub ของ ChildName ใน Combo 6
Text 10 แสดง Code จาก Field Code

โดยข้อมูลทั้งหมดมาจาก Query ที่ชื่อ QueTotal
สร้าง From ชื่อ FrmGen

สร้าง ComboBox โดยไม่ใช้ wizard นะคะ โดยมีรายละเอียดดังนี้

ในส่วนของ Combo Property

Combo0
-     Column Count      ใส่ 1
-     Control Source     ใส่ QueTotal
-     Row Source      ใส่ “Select Distinct SurName From QueTotal”
-     RowSource Type เลือก Table /Query

Combo2
-     Column Count      ใส่ 1
-     Control Source     ใส่ QueTotal
-     Row Source      ใส่ “Select Distinct GrandName From QueTotal”
-     RowSource Type เลือก Table /Query

Combo4
-     Column Count      ใส่ 1
-     Control Source     ใส่ QueTotal
-     Row Source      ใส่ “Select Distinct SurName From QueTotal”
-     RowSource Type เลือก Table /Query

Combo6
-     Column Count      ใส่ 1
-     Control Source     ใส่ QueTotal
-     Row Source      ใส่ “Select Distinct SurName From QueTotal”
-     RowSource Type เลือก Table /Query

Combo8
-     Column Count      ใส่ 1
-     Control Source     ใส่ QueTotal
-     Row Source      ใส่ “Select Distinct SurName From QueTotal”
-     RowSource Type เลือก Table /Query

Text 10
-     Control Source     ใส่ QueTotal


Code ที่ใส่

Option Compare Database
Private Sub Combo0_Change()
    If Combo0 <> "" Then
    Combo2.RowSource = "Select GrandName From QueTotal where SurName like '" & Combo0 & "'"
    Combo2.Requery
    End If
End Sub

Private Sub Combo2_Change()
    If Combo2 <> "" Then
    Combo4.RowSource = "Select ParentsName From QueTotal where GrandName like '" & Combo2 & "'"
    Combo4.Requery
    End If
End Sub

Private Sub Combo4_Change()
    If Combo4 <> "" Then
    Combo6.RowSource = "Select ChildName From QueTotal where ParentsName like '" & Combo4 & "'"
    Combo6.Requery
    End If
End Sub

Private Sub Combo6_Change()
    If Combo6 <> "" Then
    Combo8.RowSource = "Select NNName From QueTotal where ChildName like '" & Combo6 & "'"
    Combo8.Requery
    End If
End Sub

Private Sub Combo8_Change()
    If Combo8 <> "" Then
    Text10.RowSource "Select Code From QueTotal where NNName like '" & Combo8 & "'"
    Text10.Requery
    End If
End Sub

ตาม QueTotal เป็น File แนบนะคะ แล้วมันขี้น Error   ที่ Capture แนบเป็น File อ่ะค่ะ เป็นทุก Combo เลยต้องแก้ไขยังไงดีคะ


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

1 @R08633


ขอโทษทีค่ะ เมื่อกี็ Add   รูปไม่ครบ
2 @R08635
จากข้อผิดพลาด จะเห็นว่า Que Total มีช่องว่างคั่น ดังนั้นไม่ว่าที่ไหนก็ตามที่คุณอ้างถึง Que Total ก็ต้องมี bracket ครอบ ก็จะได้เป็น [Que Total] แต่ถ้าความจริงไม่มีเว้นวรรคกั้น ก็แก้ให้ถูกเท่านั้นเอง

อีกอย่างที่ผมว่าน่าจะผิดก็คือทุก ComboBox มี ControlSource เป็นคำว่า QueTotal ซึ่งไม่น่าจะใช่ เพราะ ControlSource ควรเป็นชื่อของฟิลด์ที่ได้จากเทเบิลหรือผลจาก SQL SELECT statement ที่อยู่ใน RecordSource ของฟอร์มครับ
3 @R08637
ขอบคุณคุณสันติสุขมากค่ะที่ให้คำตอบ

ขอถามเพิ่มเติมค่ะ RowSource ใน Property ต้องเหมือนกับใน Code ที่เขียนหรือเปล่าคะ

ดิฉันลอง Create Form ใหม่แล้วลองใช้wizard ในส่วนของ Control Source ไม่ใส่อะไร Row Source ก็เพิ่มคำว่า Distinct เช่น

Combo0
-     Column Count      ใส่ 1
-     Control Source    ไม่ใส่
-     Row Source      ใส่ SELECT DISTINCT [QueTotal].[Surname] FROM QueTotal;
-     RowSource Type เลือก Table /Query

ถึงตอนนี้ใน Combo Box ทุก Combo ขึ้นตามที่ต้องการ เพียงแต่แต่ละ Combo ไม่ Relate กัน
เช่น ถ้า Combo 0 เลือกนามสกุล เจริญลักษณ์
ต้องการให้ Combo 2 แสดงแต่ GrandName ที่มีนามสกุล เจริญลักษณ์ แต่มันโชว์ทุกชื่ออ่ะค่ะ เป็นอย่างนี้ทุก Combo เลย ลองดูตารางใน ความเห็น 1 ประกอบนะคะ

ดิิฉันลองแก้ Code ในส่วน Roesource แล้วก็ยังไม่ได้ รบกวนช่วยดูหน่อยค่ะว่าต้องแก้ตรงไหนอีก

ในส่วนของ TextBox 10 ต้องการให้เลือก Code จาก Column Code ในQueTotal ที่ตรงกับชื่อของ NNName ที่เลือกใน Combo 8 จริง ๆ แล้ว Textbox10 นี้ ต้องการ ให้ SurID&GranID&ParentsID&ChildID&NNID ในแต่ละ Column มารวมกันใน Text box ด้วยแต่ทำไม่เป็นเลย ไปรวมที่อื่นแล้วเอามา Query ที่งหมดค่ะ

Code ที่แก้

Option Compare Database

Private Sub Combo0_BeforeUpdate(Cancel As Integer)

End Sub

Private Sub Combo0_Change()
    If Combo0 <> "" Then
    Combo2.RowSource = "SELECT DISTINCT [QueTotal].[GrandName] FROM QueTotal where [QueTotal].[Surname] like '" & Combo0 & "'"
    Combo2.Requery
    End If
End Sub

Private Sub Combo2_Change()
    If Combo2 <> "" Then
    Combo4.RowSource = "SELECT DISTINCT [QueTotal].[ParentsName] From QueTotal where [QueTotal].[GrandName] like '" & Combo2 & "'"
    Combo4.Requery
    End If
End Sub

Private Sub Combo4_Change()
    If Combo4 <> "" Then
    Combo6.RowSource = "SELECT DISTINCT [QueTotal].[ChildName] From QueTotal where [QueTotal].[ParentsName] like '" & Combo4 & "'"
    Combo6.Requery
    End If
End Sub

Private Sub Combo6_Change()
    If Combo6 <> "" Then
    Combo8.RowSource = "SELECT DISTINCT [QueTotal].[NNName] From QueTotal where [QueTotal].[ChildName] like '" & Combo6 & "'"
    Combo8.Requery
    End If
End Sub

Private Sub Combo8_Change()
    If Combo8 <> "" Then
    Text10.RowSource "Select Code From QueTotal where [QueTotal].[NNName] like '" & Combo8 & "'"
    Text10.Requery
    End If
End Sub

ขอบคุณนะคะ
4 @R08645
เมื่อกำหนด RowSource ในโค้ดแล้ว ก็ไม่จำเป็นต้องไปกำหนดใน Property Sheet อีกครับ จุดนี้ลองแก้ไขดูก่อนแล้วดูว่าผลเป็นยังไง

ตอนค่ำผมถึงจะเข้าดูคำตอบอีกครั้ง ตอนนี้ยังไม่สะดวกครับ
5 @R08647
ลองลบ RowSource ใน Property Sheet แล้วค่ะ พอคลิ๊กไปหน้าฟอร์มที่ใช้งาน ลองคลิ๊ก Cobo Box ปรากฎว่าไม่มีอะไรขึ้นเลยค่ะ

คำถามนะคะ
1. กรณีที่แก้ Code ตามความเห็นล่าสุด แล้วจำเป็นต้องใส่ข้อมูลที่ Control Source ที่ Property Sheet อีกหรืิไม่ ถ้าต้องใส ต้องใส่อะไรคะ
2. รู้สึกเหมือน Code ที่เขียน มันไม่ link คำสั่งมาที่ตัว ฟอร์ม เลย ตอนเขียน code ต้อง สั่ง run หรือทำอะไรก่อนหรือเปล่าคะ หรือเขียน Code ไม่ถูกต้อง

ต้องขอรบกวนด้วยค่ะ นี่เป็นโปรแกรมจริงครั้งแรกเลยที่เขียน ตอนเรียนทำได้ตามคำสั่งอาจารย์ แต่ Apply อยากทำโปรแกรมแบบที่เราต้องการไม่ได้สักที

ขอบคุณนะคะที่สละเวลาช่วยดูให้
6 @R08657
Combo0 ยังต้องคง RowSource เป็น SELECT DISTINCT [QueTotal].[Surname] FROM QueTotal เอาไว้นะครับ เพราะคุณไม่มีโค้ดที่ไหนที่จะไปกำหนด RowSorce ให้แก่มัน คุณมีแต่โค้ดกำหนด RowSource ให้แก่ ComboBox ตัวอื่นๆ

1. ControlSource ต้องใส่เป็นชื่อฟิลด์ที่เก็บค่าของ ComboBox
2. ไม่เข้าใจที่ว่า "มันไม่ link คำสั่งมาที่ตัวฟอร์มเลย" คำนี้ไม่มีในสารบบของ Access ครับ

7 @R08658
-- แก้ไขคำตอบข้อ 1. --

ถ้าคุณปล่อยให้ Access จัดการแสดงหรือเก็บค่าที่เปลี่ยนแปลงบนหน้าจอลงฟิลด์ในเทเบิลหรือคิวรี่ด้วยตัวของมันเอง (นั่นคือ โดยไม่ต้องมีโค้ดใดๆ ไปสั่งให้มันทำ) เราจะเรียกฟอร์มนั้นว่าเป็น Bound Form ซึ่งทำได้ด้วยการกำหนดชื่อเทเบิล หรือชื่อคิวรี่ หรือป้อน SQL SELECT statement ลงใน RecordSource property ของฟอร์ม แต่ตรงกันข้าม ถ้าเราไม่ต้องการให้ Access มันจัดการตามที่บอกข้างต้นนี้ เราจะเรียกฟอร์มนั้นว่าเป็น Unbound Form นั่นคือ RecordSource property ของฟอร์มจะว่างไว้ไม่ต้องมีค่าใดๆ

ถ้าเป็น Bound Form คอนโทรลต่างๆบนฟอร์ม (เช่น textbox หรือ combobox เป็นต้น) ที่ต้องการผูกกับฟิลด์ที่ได้จากผลของ RecordSource ของฟอร์ม จะต้องกำหนด ControlSource เป็นชื่อฟิลด์นั้นๆ ส่วนคอนโทรลที่เราไม่ได้ต้องการผูกเข้ากับฟิลด์ที่ได้จากผลของ RecordSource ของฟอร์ม เราก็ไม่ต้องกำหนด ControlSource ให้แก่คอนโทรลนั้น

ส่วนถ้าเป็น Unbound Form เราก็ไม่ต้องกำหนด ControlSource property ให้กับคอลโทรลต่างๆบนหน้าฟอร์มเลย ถ้าเรากำหนด ก็จะมี error แสดงออกมาเมื่อรันหน้าฟอร์มเอง

นอกจากนี้ แหล่งที่มาของข้อมูลในลิสท์ของ ComboBox ที่กำหนดใน RowSource นั้น ไม่จำเป็นต้องมาจากเทเบิล หรือคิวรี่ หรือ SQL SELECT statement เดียวกันกับที่อยู่ใน RecordSource ของฟอร์ม จริงๆจะมีน้อยกรณีมากที่จะเป็นเช่นนี้ด้วยซ้ำ และจากที่คุณเล่ามา ก็ดูเหมือนว่าจะเป็น Unbound Form เสียมากกว่า

คำตอบของข้อ 1 ก็แล้วแต่ว่าคุณต้องการให้เป็น Bound Form หรือ Unbound Form นั่นเอง
8 @R08678
รบกวนถามต่อค่ะ

คือถ้า อย่างนี้กรณีของดิฉัน น่าจะเป็น Unbound form แล้วมีวิธีไหนที่จะทำให้ มันแสดงผลออกมาได้ล่ะคะ โดยให้มันแสดงผล ในหน้าจอที่คลิ๊กเลือกเลย

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