การเคลียค่าใร subform ทำไงครับ
กระทู้เก่าบอร์ด อ.Yeadram

 3,752   11
URL.หัวข้อ / URL
การเคลียค่าใร subform ทำไงครับ



      จากรูปนะครับ ผมใช้ฟอร์มหลัก ค้นหาข้อมูลจาก คิวรี่ เพื่อนำไปแสดงใน subform จากนั้นใช้ subform บันทึกค่าลงใน table2
      คือหลังจาก บันทึกค่าแล้ว ผมอยากให้ค่าที่แสดงใน subform เคลียกลับไปเป็นค่าว่าง อะครับ


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

1 @R04568
เพิ่มเติมครับ โค๊ดที่ผมเขียนตรงส่วน subform

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
2 @R04569
ใช้คอนโทรลอาเรย์นะครับ

dim ctl as control
for each ctl in controls
if typeof ctl is textbox then ctl.value=""
next


เอาไปวางต่อจาก MsgBox นั่นครับ
3 @R04570


ขอบคุณครับคุณ yeadram มันเซ้ทค่าเป็น ว่างแล้ว แต่ว่ามันมีป๊อปอัพแสดงขึ้นมาเหมือนในรูปอะครับ
4 @R04571
ถามต่อเลยนะครับ

หลังจากที่มันบันทึกค่าที่ค้นหาลงใน table2 ได้แล้วนั้น
ผมลองกลับไปค้นหาใหม่ ปรากฏว่า มันไปเปลี่ยนค่า ที่ค้นหาก่อนหน้านี้ใน table1 เป็นค่าว่างอะครับ เกิดจากอะไรครับ
5 @R04572
ผิดแล้ว!!

เอาคำสั่งของผม ออกคืนด่วนๆ เลยครับ

คำสั่งพวกนั้นใช้กับ 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=""



ส่วนคำสั่งในปุ่มค้นหา ต้องดูว่าของเก่าเป็นอย่างไร ถ้าไม่พลิกแพลงมาก ก็อาจจะใช้คำสั่งเดิมได้เช่นเดียวกัน
9 @R04595
วิธีค้นหาผมใส่เข้าไปใน คิวรี่ครับ แบบว่า ทำตามตัวอย่างที่ทดลองดาวโหลดมาอะครับ



ส่วนปุ่มค้นหา จากตัวอย่างมันมีแค่คำสั่ง
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
-- ผมก็ยิ่งมึนไปกันใหญ่


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