กระทู้เก่าบอร์ด อ.Yeadram
3,484 12
URL.หัวข้อ /
URL
ให้ text รับค่าจาก Query
รบกวนครับ ผมสร้าง FORM1 จาก Query1... ใน FORM1 มี fd Code Detail,Use และเพิ่มและสร้าง command button , text 1 เพิ่ม
นอกจากนี้ผมมี Query2 มี fd ชื่อ Code,Con ….ซึ่ง Con จะแสดงขึ้นมา ตามเงื่อนไข [Forms]![Form1]![Code] เขียนใน fd Code
คำถามครับ ถ้าผมต้องการกด command button แล้วให้ text 1 แสดง fd Code จาก Query2 จะต้องเขียน events ใน button อย่างไรครับ
นอกจากนี้ผมมี Query2 มี fd ชื่อ Code,Con ….ซึ่ง Con จะแสดงขึ้นมา ตามเงื่อนไข [Forms]![Form1]![Code] เขียนใน fd Code
คำถามครับ ถ้าผมต้องการกด command button แล้วให้ text 1 แสดง fd Code จาก Query2 จะต้องเขียน events ใน button อย่างไรครับ
12 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R15134
text 1 ต้องเป็น ComboBox
me.text 1=Dlookup("[fdCode]","Query2")
me.text 1=Dlookup("[fdCode]","Query2")
3 @R15135
แก้ครับ ไม่ใช่ Combobox แต่เป็น textbox
4 @R15136
ได้แล้วครับ ขอบพระคุณ อจ. UN ครับ ไม่เคยใช้คำสั่งนี้ครับ
ไม่เคยมีโจทย์แบบนี้ครับ
ไม่เคยมีโจทย์แบบนี้ครับ
5 @R15137
แต่ติดนิดหน่อย พอดี code มีเป็นข้อ1............
ข้อ2...........
สูงสุด 10 ครับ แต่มันแสดงเฉพาะข้อ 1 เท่านั้น ใน query 2 ที่ runหัวข้อมาครบครับ
ข้อ2...........
สูงสุด 10 ครับ แต่มันแสดงเฉพาะข้อ 1 เท่านั้น ใน query 2 ที่ runหัวข้อมาครบครับ
6 @R15139
ขอโทษนะครับ อจ. UN ผมใช้คำสั่ง
me.text 1=Dlookup("[CON]","Query2")
แต่ con บางอันมีมากกว่า 1
text 1 จะแสดง แค่หัวข้อเดียวทั้งๆที่เวลา run QUERY 2 หัวข้อมาครบทั้งหมดครับ
me.text 1=Dlookup("[CON]","Query2")
แต่ con บางอันมีมากกว่า 1
text 1 จะแสดง แค่หัวข้อเดียวทั้งๆที่เวลา run QUERY 2 หัวข้อมาครบทั้งหมดครับ
7 @R15140
ผมอ่านคำถามคุณไม่เข้าใจเท่าไหร่ครับ จับตุดได้ตรงคำถาม
คุณสามารถใส่เงื่อนไขได้ครับ
me.text 1=Dlookup("[CON]","Query2","code=1")
ตรง code=1 ลองเปลี่ยนไปตามเงื่อนไขดูนะครับ
ปล.ในบอร์ดนี้ผมยังไม่ถึงขั้น อาจารย์ครับ
คุณสามารถใส่เงื่อนไขได้ครับ
me.text 1=Dlookup("[CON]","Query2","code=1")
ตรง code=1 ลองเปลี่ยนไปตามเงื่อนไขดูนะครับ
ปล.ในบอร์ดนี้ผมยังไม่ถึงขั้น อาจารย์ครับ
8 @R15141
ใครให้ความรู้เป็นวิทยาทานผมถือว่าเป็น อจ.เป็น ครู ทั้งหมดครับคือ
ขอ focus คำสั่ง Dlookup นะครับ
เท่าที่ทราบ มันจะแสดงเฉพาะ rec แรกเท่านั้น...... ถ้าหากผมต้องการให้มันแสดง rec ทั้งหมดที่ run ได้จาก query2 จะต้องเขียนอะไรเพิ่มเติมครับ อจ.
ขอบคุณครับ 5555 อจ.เห็นไหม สมชื่อว่าไม่รู้เรื่องไหม ขนาดเขียนให้ อจ. ผมยังเขียนไม่รู้เรื่อง
ขอ focus คำสั่ง Dlookup นะครับ
เท่าที่ทราบ มันจะแสดงเฉพาะ rec แรกเท่านั้น...... ถ้าหากผมต้องการให้มันแสดง rec ทั้งหมดที่ run ได้จาก query2 จะต้องเขียนอะไรเพิ่มเติมครับ อจ.
ขอบคุณครับ 5555 อจ.เห็นไหม สมชื่อว่าไม่รู้เรื่องไหม ขนาดเขียนให้ อจ. ผมยังเขียนไม่รู้เรื่อง
9 @R15142
ก็อยากช่วยนะครับ แต่ไม่เข้าใจ รายละเอียด ที่ตอบก็เดาๆ ครับ
งั้นเดาต่ออีกนิด เราสามารถ ใส่เงื้อนไข ตามที่โพสไปแล้ว โดย
ต้องมีโค็ตโชว์ในฟอร์มด้วย แล้วอ้างอิง ไปที่ Query
Query อาจะกรองโดยใส่เงื่อนไข ตามโค๊ตที่ต้องการครับ
ปล.ที่ไม่มีคนมาตอบเพราะว่าข้อมูลคุณให้มาไม่ละเอียดพอ
แล้วอธิบายแบบคุณเข้าใจคนเดียวครับ ลองดูกระทู้คำถามที่มีคนตอบนะครับ
งั้นเดาต่ออีกนิด เราสามารถ ใส่เงื้อนไข ตามที่โพสไปแล้ว โดย
ต้องมีโค็ตโชว์ในฟอร์มด้วย แล้วอ้างอิง ไปที่ Query
Query อาจะกรองโดยใส่เงื่อนไข ตามโค๊ตที่ต้องการครับ
ปล.ที่ไม่มีคนมาตอบเพราะว่าข้อมูลคุณให้มาไม่ละเอียดพอ
แล้วอธิบายแบบคุณเข้าใจคนเดียวครับ ลองดูกระทู้คำถามที่มีคนตอบนะครับ
10 @R15144
เดาจากคำถามตามความเข้าใจ
คุณน่าจะทำเป็น Mianform และ Subform
1.สร้าง form ใช้สำหรับทำเป็น mianform ชื่อ Form1 มี textbox ตามโค้ดคุณ fd Code Detail เละ Use และปุ่มกด Cmd button แหล่งข้อมูลจาก Query1
2. สร้าง form อีก1 ตัวสำหรับใช้เป็น Subform ชื่อ Subform1 มี textbox รับค่าจากแหล่งข้อมูล Query2 กำหนดมุมมองเริ่มต้นform เป็น Datasheet หรือ Continuous forms
3. รวม Mianform และSubform เข้าด้วยกัน( ถ้าไม่เข้าศึกษาการทำ mianformและsubform เพิ่มเติม)
4. คำสั่ง cmd button เหตุการณ์ on click โค้ด
Me.Subform1.requery
เวลาคุณกดปุ่ม cmd button ข้อมูลจาก Query2 ก็จะแสดงใน Subform1ตามเหงือนไขที่คุณสร้าง
คุณน่าจะทำเป็น Mianform และ Subform
1.สร้าง form ใช้สำหรับทำเป็น mianform ชื่อ Form1 มี textbox ตามโค้ดคุณ fd Code Detail เละ Use และปุ่มกด Cmd button แหล่งข้อมูลจาก Query1
2. สร้าง form อีก1 ตัวสำหรับใช้เป็น Subform ชื่อ Subform1 มี textbox รับค่าจากแหล่งข้อมูล Query2 กำหนดมุมมองเริ่มต้นform เป็น Datasheet หรือ Continuous forms
3. รวม Mianform และSubform เข้าด้วยกัน( ถ้าไม่เข้าศึกษาการทำ mianformและsubform เพิ่มเติม)
4. คำสั่ง cmd button เหตุการณ์ on click โค้ด
Me.Subform1.requery
เวลาคุณกดปุ่ม cmd button ข้อมูลจาก Query2 ก็จะแสดงใน Subform1ตามเหงือนไขที่คุณสร้าง
11 @R15145
จากคำถาม เท่าที่ผมเข้าใจนะครับ การใช้ Dlookup พอมาถึงเรื่องของการที่อยากให้แสดงค่าเรคคอร์ดทั้งหมด ก็คงหนี้ไม่พ้นต้องใช้การลูปเข้าช่วย ก็จะมีสิ่งที่ต้องทำความเข้าใจก่อน คือ
- ค่าที่ได้หากใช้การลูป จะส่งเข้ามาเป็นช่วงๆตามรอบการลูป (ข้อมูลแบบ Array) ซึ่ง Text Box ไม่สามารถรับข้อมูลแบบ Array ได้ คอนโทรลที่รองรับคือ Combo Box และ List Box
- ข้อจำกัดของคำสั่ง Dlookup ในการลูปคือ คุณต้องหาฟิลด์ข้อมูลที่สามารถอ้างอิงการเลื่อนไปยังเรคคอร์ดต่อๆไป เพื่อใช้เป็นเงื่อนไขในการส่งข้อมูลถัดลงมาให้ได้ ในที่นี้หากคิวรี่ของคุณมีฟิลด์จำพวก Primary Key จะดีมาก
- แต่หากใช้ Dlookup ไม่ได้จริงๆก็ยังมีคำสั่งอื่นๆที่น่าจะทำได้เช่นกัน
ยิ่งอธิบายผมยิ่ง งง เอง ผมยกตัวอย่างให้คุณปรับใช้ดูแล้วกันนะครับ
สมมุติตาราง Query2 มีข้อมูลประมาณนี้
ID Code Con
1 A ข้อมูลA
2 B ข้อมูลB
3 C ข้อมูลC
4 D ข้อมูลD
ตัวอย่างที่1 หากใช้กับ Text Box (Text1) ด้วยคำสั่ง Dlookup
Dim TTT As Integer, TTT2 As String, i As Integer
TTT = 1
For i = 1 To DCount("ID", "Query2")
If Not IsNull(DLookup("Con", "Query2", "ID = " & TTT)) Then
TTT2 = TTT2 & ", " & DLookup("Con", "Query2", "ID = " & TTT)
End If
TTT = TTT + 1
Next
Me.Text1 = Mid(TTT2, 3)
- จากคำสั่งจะเห็นว่าคุณจำเป็นต้องมีข้อมูลจำพวก ID สำหรับอ้างในเงื่อนไขของ DLookup เพื่อให้สามารถเลื่อนเรคคอร์ดต่อไปได้
ตัวอย่างที่ 2 หากใช้กับ Text Box (Text1) ด้วย DAO
Dim db As DAO.Database, rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Query2")
rs.MoveFirst
Dim TTT As String
Do Until rs.EOF
If Not IsNull(rs!Con) Then
TTT = TTT & ", " & rs!Con
End If
rs.MoveNext
Loop
Me.Text1 = Mid(TTT, 3)
rs.Close: Set rs = Nothing
Set db = Nothing
- จากคำสั่งนี้จะเห็นว่าเราสามารถลูปข้อมูลทั้งหมดโดยไม่ต้องใช้การอ้าง ID
ข้อมูลที่ได้
Text1 = "ข้อมูลA, ข้อมูลB, ข้อมูลC, ข้อมูลD"
- เนื่องจากเป็น Text Box จะเห็นว่าเราต้องแปลงให้อยู่ในรูปแบบของ String โดยจากในตัวอย่างใช้ (,) ในการคั่นระหว่างข้อมูล
แต่หากคุณจะนำไปใช้โดยเปลี่ยนจาก Tex Box เป็น List Box หรือ Combo Box ก็สามารถทำได้ดังนี้
ตัวอย่าง3 ใช้กับ Combo Box (Combo1) ด้วย DAO
Dim db As DAO.Database, rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Query2")
rs.MoveFirst
Dim TTT As String
Do Until rs.EOF
If Not IsNull(rs!Con) Then
TTT = TTT & "'" & rs!Con & "';"
End If
rs.MoveNext
Loop
Me.Combo1.RowSourceType = "Value List"
Me.Combo1.RowSource = Mid(TTT, 1, Len(TTT) - 1)
rs.Close: Set rs = Nothing
Set db = Nothing
- Combo1 ก็จะแสดงข้อมูล Con ตามลำดับครับ
ลองปรับใช้ดูนะครับ ไม่รู้ผมอธิบายได้ งง หรือเปล่า แต่ก็ประมาณเท่าที่นึกได้นะครับ
- ค่าที่ได้หากใช้การลูป จะส่งเข้ามาเป็นช่วงๆตามรอบการลูป (ข้อมูลแบบ Array) ซึ่ง Text Box ไม่สามารถรับข้อมูลแบบ Array ได้ คอนโทรลที่รองรับคือ Combo Box และ List Box
- ข้อจำกัดของคำสั่ง Dlookup ในการลูปคือ คุณต้องหาฟิลด์ข้อมูลที่สามารถอ้างอิงการเลื่อนไปยังเรคคอร์ดต่อๆไป เพื่อใช้เป็นเงื่อนไขในการส่งข้อมูลถัดลงมาให้ได้ ในที่นี้หากคิวรี่ของคุณมีฟิลด์จำพวก Primary Key จะดีมาก
- แต่หากใช้ Dlookup ไม่ได้จริงๆก็ยังมีคำสั่งอื่นๆที่น่าจะทำได้เช่นกัน
ยิ่งอธิบายผมยิ่ง งง เอง ผมยกตัวอย่างให้คุณปรับใช้ดูแล้วกันนะครับ
สมมุติตาราง Query2 มีข้อมูลประมาณนี้
ID Code Con
1 A ข้อมูลA
2 B ข้อมูลB
3 C ข้อมูลC
4 D ข้อมูลD
ตัวอย่างที่1 หากใช้กับ Text Box (Text1) ด้วยคำสั่ง Dlookup
Dim TTT As Integer, TTT2 As String, i As Integer
TTT = 1
For i = 1 To DCount("ID", "Query2")
If Not IsNull(DLookup("Con", "Query2", "ID = " & TTT)) Then
TTT2 = TTT2 & ", " & DLookup("Con", "Query2", "ID = " & TTT)
End If
TTT = TTT + 1
Next
Me.Text1 = Mid(TTT2, 3)
- จากคำสั่งจะเห็นว่าคุณจำเป็นต้องมีข้อมูลจำพวก ID สำหรับอ้างในเงื่อนไขของ DLookup เพื่อให้สามารถเลื่อนเรคคอร์ดต่อไปได้
ตัวอย่างที่ 2 หากใช้กับ Text Box (Text1) ด้วย DAO
Dim db As DAO.Database, rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Query2")
rs.MoveFirst
Dim TTT As String
Do Until rs.EOF
If Not IsNull(rs!Con) Then
TTT = TTT & ", " & rs!Con
End If
rs.MoveNext
Loop
Me.Text1 = Mid(TTT, 3)
rs.Close: Set rs = Nothing
Set db = Nothing
- จากคำสั่งนี้จะเห็นว่าเราสามารถลูปข้อมูลทั้งหมดโดยไม่ต้องใช้การอ้าง ID
ข้อมูลที่ได้
Text1 = "ข้อมูลA, ข้อมูลB, ข้อมูลC, ข้อมูลD"
- เนื่องจากเป็น Text Box จะเห็นว่าเราต้องแปลงให้อยู่ในรูปแบบของ String โดยจากในตัวอย่างใช้ (,) ในการคั่นระหว่างข้อมูล
แต่หากคุณจะนำไปใช้โดยเปลี่ยนจาก Tex Box เป็น List Box หรือ Combo Box ก็สามารถทำได้ดังนี้
ตัวอย่าง3 ใช้กับ Combo Box (Combo1) ด้วย DAO
Dim db As DAO.Database, rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Query2")
rs.MoveFirst
Dim TTT As String
Do Until rs.EOF
If Not IsNull(rs!Con) Then
TTT = TTT & "'" & rs!Con & "';"
End If
rs.MoveNext
Loop
Me.Combo1.RowSourceType = "Value List"
Me.Combo1.RowSource = Mid(TTT, 1, Len(TTT) - 1)
rs.Close: Set rs = Nothing
Set db = Nothing
- Combo1 ก็จะแสดงข้อมูล Con ตามลำดับครับ
ลองปรับใช้ดูนะครับ ไม่รู้ผมอธิบายได้ งง หรือเปล่า แต่ก็ประมาณเท่าที่นึกได้นะครับ
12 @R15146
ขอบพระคุณ อจ.และคุณครูทุกท่านครับ โดยเฉพาะ อจ.TTTที่ตั้งใจเขียนมาให่้ตั้ง 3 แบบ ผมเข้าใจจากใจจริงนะครับว่ามันเสียเวลาในการอธิบายและในการเขียนออกมาแก้ไขปัญหาให้ผมมาก อจTTT.ครับ ข้อแรกก็ออกแล้วครับขอบพระคุณอจ.ทุกท่านจริงๆ
ขอบพระคุณ อจ.และคุณครูทุกท่านครับ โดยเฉพาะ อจ.TTTที่ตั้งใจเขียนมาให่้ตั้ง 3 แบบ ผมเข้าใจจากใจจริงนะครับว่ามันเสียเวลาในการอธิบายและในการเขียนออกมาแก้ไขปัญหาให้ผมมาก อจTTT.ครับ ข้อแรกก็ออกแล้วครับขอบพระคุณอจ.ทุกท่านจริงๆ
Time: 0.2522s
นอกจากนี้ผมมี Query2 มี fd ชื่อ Code,Con ….ซึ่ง Con จะแสดงขึ้นมา ตามเงื่อนไข [Forms]![Form1]![Code] เขียนใน fd Code
คำถามครับ ถ้าผมต้องการกด command button แล้วให้ text 1 แสดง fd Code จาก Query2 จะต้องเขียน events ใน button อย่างไรครับ