ให้ text รับค่าจาก Query
กระทู้เก่าบอร์ด อ.Yeadram

 3,425   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 อย่างไรครับ

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

1 @R15133
รบกวนครับ ผมสร้าง 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 อย่างไรครับ
2 @R15134
text 1 ต้องเป็น ComboBox
me.text 1=Dlookup("[fdCode]","Query2")
3 @R15135
แก้ครับ ไม่ใช่ Combobox แต่เป็น textbox
4 @R15136
ได้แล้วครับ ขอบพระคุณ อจ. UN ครับ ไม่เคยใช้คำสั่งนี้ครับ
ไม่เคยมีโจทย์แบบนี้ครับ
5 @R15137
แต่ติดนิดหน่อย พอดี code มีเป็นข้อ1............
                                                ข้อ2...........


สูงสุด 10 ครับ แต่มันแสดงเฉพาะข้อ 1 เท่านั้น ใน query 2 ที่ runหัวข้อมาครบครับ
6 @R15139
ขอโทษนะครับ อจ. UN ผมใช้คำสั่ง
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 ลองเปลี่ยนไปตามเงื่อนไขดูนะครับ

ปล.ในบอร์ดนี้ผมยังไม่ถึงขั้น อาจารย์ครับ
8 @R15141
   ใครให้ความรู้เป็นวิทยาทานผมถือว่าเป็น อจ.เป็น ครู ทั้งหมดครับคือ
ขอ focus คำสั่ง Dlookup นะครับ


เท่าที่ทราบ มันจะแสดงเฉพาะ rec แรกเท่านั้น...... ถ้าหากผมต้องการให้มันแสดง rec ทั้งหมดที่ run ได้จาก query2 จะต้องเขียนอะไรเพิ่มเติมครับ อจ.

     ขอบคุณครับ 5555 อจ.เห็นไหม สมชื่อว่าไม่รู้เรื่องไหม ขนาดเขียนให้ อจ. ผมยังเขียนไม่รู้เรื่อง
9 @R15142
ก็อยากช่วยนะครับ แต่ไม่เข้าใจ รายละเอียด ที่ตอบก็เดาๆ ครับ

งั้นเดาต่ออีกนิด เราสามารถ ใส่เงื้อนไข ตามที่โพสไปแล้ว โดย
ต้องมีโค็ตโชว์ในฟอร์มด้วย แล้วอ้างอิง ไปที่ 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ตามเหงือนไขที่คุณสร้าง
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 ตามลำดับครับ
ลองปรับใช้ดูนะครับ ไม่รู้ผมอธิบายได้ งง หรือเปล่า แต่ก็ประมาณเท่าที่นึกได้นะครับ
12 @R15146

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