กระทู้เก่าบอร์ด อ.Yeadram
        
           3,957   11		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        การเคลียค่าใร subform ทำไงครับ      
     
จากรูปนะครับ ผมใช้ฟอร์มหลัก ค้นหาข้อมูลจาก คิวรี่ เพื่อนำไปแสดงใน subform จากนั้นใช้ subform บันทึกค่าลงใน table2
คือหลังจาก บันทึกค่าแล้ว ผมอยากให้ค่าที่แสดงใน subform เคลียกลับไปเป็นค่าว่าง อะครับ
				11 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R04569    
        
  
      ใช้คอนโทรลอาเรย์นะครับ
dim ctl as control
for each ctl in controls
if typeof ctl is textbox then ctl.value=""
next
เอาไปวางต่อจาก MsgBox นั่นครับ
    
  dim ctl as control
for each ctl in controls
if typeof ctl is textbox then ctl.value=""
next
เอาไปวางต่อจาก MsgBox นั่นครับ
        
    3 @R04570    
        
       
ขอบคุณครับคุณ yeadram มันเซ้ทค่าเป็น ว่างแล้ว แต่ว่ามันมีป๊อปอัพแสดงขึ้นมาเหมือนในรูปอะครับ
    
  
   
ขอบคุณครับคุณ yeadram มันเซ้ทค่าเป็น ว่างแล้ว แต่ว่ามันมีป๊อปอัพแสดงขึ้นมาเหมือนในรูปอะครับ
        
    4 @R04571    
        
  
      ถามต่อเลยนะครับ  
หลังจากที่มันบันทึกค่าที่ค้นหาลงใน table2 ได้แล้วนั้น
ผมลองกลับไปค้นหาใหม่ ปรากฏว่า มันไปเปลี่ยนค่า ที่ค้นหาก่อนหน้านี้ใน table1 เป็นค่าว่างอะครับ เกิดจากอะไรครับ
    
  หลังจากที่มันบันทึกค่าที่ค้นหาลงใน table2 ได้แล้วนั้น
ผมลองกลับไปค้นหาใหม่ ปรากฏว่า มันไปเปลี่ยนค่า ที่ค้นหาก่อนหน้านี้ใน table1 เป็นค่าว่างอะครับ เกิดจากอะไรครับ
        
    5 @R04572    
        
  
      ผิดแล้ว!!
เอาคำสั่งของผม ออกคืนด่วนๆ เลยครับ
คำสั่งพวกนั้นใช้กับ control ที่ไม่ได้ผูกกับฟิลด์
ดูจากที่คุณเล่าอาการต่อมา ผมสันนิษฐานว่าคุณให้คอนโทรลผูกกับฟิลด์ ดังนั้นคำตอบใน ข้อความก่อนหน้านี้ ผิดครับ! ห้ามนำไปใช้
---- คำจากกระทู้ ว่า "ค้นหาข้อมูลจาก คิวรี่ เพื่อนำไปแสดงใน subform " ผมก็นึกว่าคุณใช้โค้ดโปรยข้อมูลลงใน Unbound textbox
ถ้าคอนโทรลของคุณมีการผูกกับฟิลด์ ต้องทำหลายขั้นตอนครับ
---- ตอนล้าง
1 สั่งให้คอนโทรลทุกตัวเลิกผูกกับชื่อฟิลด์ (ล้างแหล่งข้อมูลของคอนโทรล)
2 สั่งให้Rowsource ของฟอร์ม เป็นค่าว่าง (ล้างแหล่งข้อมูลของฟอร์ม)
3 สั่งฟอร์มให้ Refresh
---- ตอนสั่งโชว์ข้อมูล (ผลการค้นหา)
1 กำหนด Rowsource ให้กับฟอร์ม (statement ของคิวรี่ ที่ใช้ค้นหา) (กำหนดแหล่งข้อมูลให้กับฟอร์ม)
2 กำหนดให้คอนโทรล (textbox) แต่ละตัวทำการผูกกับชื่อฟิลด์ (กำหนดแหล่งข้อมูลให้กับคอนโทรล)
3 สั่งให้ฟอร์ม Requery
ทั้งหมดที่กล่าวมานั่นคือให้กระทำกับฟอร์มย่อยเท่านั้น แต่ให้เขียนโค้ดไว้ที่ฟอร์มหลักจะดีที่สุด กล่าวคือ ให้ฟอร์มหลัก สั่งฟอร์มย่อยกระทำอะไรต่างๆ นาๆ ดังกล่าว
    
    
  เอาคำสั่งของผม ออกคืนด่วนๆ เลยครับ
คำสั่งพวกนั้นใช้กับ control ที่ไม่ได้ผูกกับฟิลด์
ดูจากที่คุณเล่าอาการต่อมา ผมสันนิษฐานว่าคุณให้คอนโทรลผูกกับฟิลด์ ดังนั้นคำตอบใน ข้อความก่อนหน้านี้ ผิดครับ! ห้ามนำไปใช้
---- คำจากกระทู้ ว่า "ค้นหาข้อมูลจาก คิวรี่ เพื่อนำไปแสดงใน subform " ผมก็นึกว่าคุณใช้โค้ดโปรยข้อมูลลงใน Unbound textbox
ถ้าคอนโทรลของคุณมีการผูกกับฟิลด์ ต้องทำหลายขั้นตอนครับ
---- ตอนล้าง
1 สั่งให้คอนโทรลทุกตัวเลิกผูกกับชื่อฟิลด์ (ล้างแหล่งข้อมูลของคอนโทรล)
2 สั่งให้Rowsource ของฟอร์ม เป็นค่าว่าง (ล้างแหล่งข้อมูลของฟอร์ม)
3 สั่งฟอร์มให้ Refresh
---- ตอนสั่งโชว์ข้อมูล (ผลการค้นหา)
1 กำหนด Rowsource ให้กับฟอร์ม (statement ของคิวรี่ ที่ใช้ค้นหา) (กำหนดแหล่งข้อมูลให้กับฟอร์ม)
2 กำหนดให้คอนโทรล (textbox) แต่ละตัวทำการผูกกับชื่อฟิลด์ (กำหนดแหล่งข้อมูลให้กับคอนโทรล)
3 สั่งให้ฟอร์ม Requery
ทั้งหมดที่กล่าวมานั่นคือให้กระทำกับฟอร์มย่อยเท่านั้น แต่ให้เขียนโค้ดไว้ที่ฟอร์มหลักจะดีที่สุด กล่าวคือ ให้ฟอร์มหลัก สั่งฟอร์มย่อยกระทำอะไรต่างๆ นาๆ ดังกล่าว
        
    6 @R04578    
        
  
      พอมีตัวอย่างมาให้แกะ บ้างไหมครับ แบบว่าผมเริมหัดเขียนมันจากเวปนี้อะครับ เลยไม่มีหลักการเขียน หรือ ทฤษฏีใด ๆ เลย แกะมาใช้ล้วน ๆ เลยอ่าครับ
- - *
    
  - - *
        
    7 @R04579    
        
  
      ลักษณะที่ผมกำลังทำประมาณรูปนี้อะครับ
 
แนะนำตัวอย่างหรือวิธีทำด้วยครับ อาจารย์
    
   
แนะนำตัวอย่างหรือวิธีทำด้วยครับ อาจารย์
        
    8 @R04589    
        
  
      คุณไม่ต้องทำเป็นฟอร์มย่อยหรอกครับ แค่สร้าง Textbox สองตัวนั้น วางในฟอร์มหลักได้เลย  แต่ textbox ทั้งสองตัวนั้น ต้องไม่ผูกกับฟิลด์ใดๆเลย
คำสั่งในปุ่มบันทึก ก็ใช้คำสั่งเดิมได้ และ.....
ไหนๆ มันก็มีแค่ 2 ตัว เวลาจะล้างค่าก็ไม่ต้องใช้คอนโทรลอาเรย์ แต่ให้เขียนสั่งไปตรงๆ เลย
txt1=""
txt2=""
ส่วนคำสั่งในปุ่มค้นหา ต้องดูว่าของเก่าเป็นอย่างไร ถ้าไม่พลิกแพลงมาก ก็อาจจะใช้คำสั่งเดิมได้เช่นเดียวกัน
    
  คำสั่งในปุ่มบันทึก ก็ใช้คำสั่งเดิมได้ และ.....
ไหนๆ มันก็มีแค่ 2 ตัว เวลาจะล้างค่าก็ไม่ต้องใช้คอนโทรลอาเรย์ แต่ให้เขียนสั่งไปตรงๆ เลย
txt1=""
txt2=""
ส่วนคำสั่งในปุ่มค้นหา ต้องดูว่าของเก่าเป็นอย่างไร ถ้าไม่พลิกแพลงมาก ก็อาจจะใช้คำสั่งเดิมได้เช่นเดียวกัน
        
    9 @R04595    
        
  
      วิธีค้นหาผมใส่เข้าไปใน คิวรี่ครับ  แบบว่า ทำตามตัวอย่างที่ทดลองดาวโหลดมาอะครับ
 
ส่วนปุ่มค้นหา จากตัวอย่างมันมีแค่คำสั่ง
Private Sub Search_Click()
SendKeys "{f9}", True
End Sub
ขอถามอีกอย่างครับอาจาร แล้วจะเอาค่ามาแสดงใน Text Box ที่สร้างขึ้นมาใหม่ ได้ยังไงครับ
    
   
ส่วนปุ่มค้นหา จากตัวอย่างมันมีแค่คำสั่ง
Private Sub Search_Click()
SendKeys "{f9}", True
End Sub
ขอถามอีกอย่างครับอาจาร แล้วจะเอาค่ามาแสดงใน Text Box ที่สร้างขึ้นมาใหม่ ได้ยังไงครับ
        
    10 @R04599    
        
  
      ไม่มีตัวอย่างอื่นๆ แล้วเหรอครับ ตัวอย่างนี้ที่คุณนำมาประยุกต์น่ะ มันใช้คิวรี่ ซึ่งมันไม่ยืดหยุ่น  พยายามดูตัวอย่างของคนอื่น เยอะๆ ครับ แม้มันจะไม่เกี่ยวกับงานของเรา แต่ก็จะช่วยสอนเราให้เรียนรู้เทคนิกอื่นๆ ไปด้วย
งานของคุณน่ะ ทุกๆ คอนโทรลแทบไม่ต้อง bound กับฟิลด์เลยครับ
และฟอร์มก็ไม่ต้อง bound กับแหล่งข้อมูลใดๆ เลยด้วยซ้ำ ทำงานได้อิสระมากๆ
1) สร้างฟอร์มเปล่าๆ ในมุมมองออกแบบ
2) วางคอนโทรลต่างๆ ลงไป
--- คอมโบสองตัว ปรับแต่งคุณสมบัติให้เรียบร้อย
--- textbox 1 ตัวแถวบน
--- ปุ่มคำสั่งตัวบน เขียน caption ว่า "ค้นหา" ตั้งชื่อคอนโทรลว่า cmdFind
--- ต่อไปทำชุดล่าง อาจจะวาดเส้นกรอบใส่ให้มันเพื่อดูเป็นสัดเป็นส่วน
--- textbox 1 ตัว ตั้งชื่อ ว่า txtID
--- textbox 1 ตัว ชื่อว่า txtName
--- ปุ่มคำสั่ง 1 ตัว เขียน captionว่า "บันทึก" ตั้งชื่อคอนโทรลว่า cmdSave
3) ในปุ่มบันทึก เขียนโค้ดตามที่คุณเคยเขียนนั่นแหละครับ คือเอาค่าต่างๆ จาก textbox ไปบันทึก
4) ปุ่มค้นหา ก็เขียน ด้วยการสั่งให้ recordset ไปเลือกข้อมูลตามเงื่อนไขที่ระบุ เงื่อนไขเอามาจากไหน ก็เอามาจากคอนโทรลแถวบนนั่นแหละครับ
พอได้ เรคคอร์ดเซ็ตมาแล้วก็เอามาโปรยแสดงผลลงในกล่องข้างล่าง
ผมไม่สามารถเขียนตัวอย่างให้ดูได้ เพราะผมไม่รู้จะอธิบายยังไง คุณถึงจะเข้าใจผม ผมพยายามจะเลือกใช้คำ เลือกใช้ชื่อที่มันใกล้เคียงกับงานของคุณ เช่นชื่อตาราง ชื่อฟิลด์ต่างๆ แต่รูปที่คุณนำมาแสดง รวมทั้งต้นฉบับโค้ด ผมสังเกตเห็นว่ามันมีชื่อฟิลด์ชื่อคอนโทรลที่ไม่ได้เกี่ยวกันเลย ผมเลยไม่กล้าเดาว่าอะไรเป็นอะไร
-- คิวรี่ของคุณได้ฟิลด์อะไรมาบ้าง
-- คิวรี่ของคุณ select ข้อมูลจากตารางชื่ออะไร ใช้อะไรเป็นเงื่อนไขบ้าง
-- คอมโบของคุณชื่ออะไร แหล่งข้อมุลของคอมโบของคุณมันจะออกมาในรูปไหน เป็น number หรือเป็น text
-- แล้วคุณเอาอะไรบ้างจะไปบันทึกใน ตารางอื่น เห็นในโค้ดของคุณมีทั้ง
input_id, depid แล้วยังมี input_id อีก แต่ในคิวรี่ต้นทางของคุณมันมี code, input_lot, input_period
-- ผมก็ยิ่งมึนไปกันใหญ่
ลองหาตัวอย่างอื่นมาดูบ้างครับ อย่ายึดติดกับตัวอย่างเดียวที่คุณมี ลองดูวิธีการอื่นๆ บ้าง ค้นตามกระทู้เก่าๆ ก็ได้ครับ
    
  งานของคุณน่ะ ทุกๆ คอนโทรลแทบไม่ต้อง bound กับฟิลด์เลยครับ
และฟอร์มก็ไม่ต้อง bound กับแหล่งข้อมูลใดๆ เลยด้วยซ้ำ ทำงานได้อิสระมากๆ
1) สร้างฟอร์มเปล่าๆ ในมุมมองออกแบบ
2) วางคอนโทรลต่างๆ ลงไป
--- คอมโบสองตัว ปรับแต่งคุณสมบัติให้เรียบร้อย
--- textbox 1 ตัวแถวบน
--- ปุ่มคำสั่งตัวบน เขียน caption ว่า "ค้นหา" ตั้งชื่อคอนโทรลว่า cmdFind
--- ต่อไปทำชุดล่าง อาจจะวาดเส้นกรอบใส่ให้มันเพื่อดูเป็นสัดเป็นส่วน
--- textbox 1 ตัว ตั้งชื่อ ว่า txtID
--- textbox 1 ตัว ชื่อว่า txtName
--- ปุ่มคำสั่ง 1 ตัว เขียน captionว่า "บันทึก" ตั้งชื่อคอนโทรลว่า cmdSave
3) ในปุ่มบันทึก เขียนโค้ดตามที่คุณเคยเขียนนั่นแหละครับ คือเอาค่าต่างๆ จาก textbox ไปบันทึก
4) ปุ่มค้นหา ก็เขียน ด้วยการสั่งให้ recordset ไปเลือกข้อมูลตามเงื่อนไขที่ระบุ เงื่อนไขเอามาจากไหน ก็เอามาจากคอนโทรลแถวบนนั่นแหละครับ
พอได้ เรคคอร์ดเซ็ตมาแล้วก็เอามาโปรยแสดงผลลงในกล่องข้างล่าง
ผมไม่สามารถเขียนตัวอย่างให้ดูได้ เพราะผมไม่รู้จะอธิบายยังไง คุณถึงจะเข้าใจผม ผมพยายามจะเลือกใช้คำ เลือกใช้ชื่อที่มันใกล้เคียงกับงานของคุณ เช่นชื่อตาราง ชื่อฟิลด์ต่างๆ แต่รูปที่คุณนำมาแสดง รวมทั้งต้นฉบับโค้ด ผมสังเกตเห็นว่ามันมีชื่อฟิลด์ชื่อคอนโทรลที่ไม่ได้เกี่ยวกันเลย ผมเลยไม่กล้าเดาว่าอะไรเป็นอะไร
-- คิวรี่ของคุณได้ฟิลด์อะไรมาบ้าง
-- คิวรี่ของคุณ select ข้อมูลจากตารางชื่ออะไร ใช้อะไรเป็นเงื่อนไขบ้าง
-- คอมโบของคุณชื่ออะไร แหล่งข้อมุลของคอมโบของคุณมันจะออกมาในรูปไหน เป็น number หรือเป็น text
-- แล้วคุณเอาอะไรบ้างจะไปบันทึกใน ตารางอื่น เห็นในโค้ดของคุณมีทั้ง
input_id, depid แล้วยังมี input_id อีก แต่ในคิวรี่ต้นทางของคุณมันมี code, input_lot, input_period
-- ผมก็ยิ่งมึนไปกันใหญ่
ลองหาตัวอย่างอื่นมาดูบ้างครับ อย่ายึดติดกับตัวอย่างเดียวที่คุณมี ลองดูวิธีการอื่นๆ บ้าง ค้นตามกระทู้เก่าๆ ก็ได้ครับ
        
    11 @R04601    
        
    
      ขอบคุณครับ ขอไปลองก่อน  
    
    
   
    
      Time: 0.5980s
    
      
		
Private Sub wpSave_Click()
On Error GoTo Err_wpSave_Click
Dim sq As String
sq = "Insert into withdraw(input_id,depId,wdTime)" _
& "Values('" & input_id & "','" _
& depId & "', '" _
& input_id & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL sq
DoCmd.SetWarnings False
MsgBox "add data ok"
Exit_wpSave_Click:
Exit Sub
Err_wpSave_Click:
MsgBox Err.Description
Resume Exit_wpSave_Click
End Sub