save access
กระทู้เก่าบอร์ด อ.Yeadram

 3,309   4
URL.หัวข้อ / URL
save access

สวัสดีค่ะ
พอดีตอนนี้ทำฐานข้อมูลน่ะค่ะ เวลาใช้งานเปิดหน้าฟอร์มอ่าค่ะ
พอมีบังเอิญไปเขียนทับ มันทำการเซฟข้อมูลอัตโนมัติโดยไม่ต้องกดปุ่มเซฟ
ทำให้มีปัญหา
จะต้องทำยังไงค่ะ
เพื่อไม่ให้มันเซฟอัตโนมัติ
ขอบคุณล่วงหน้าค่ะ

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

1 @R05958
Access ที่คุณหมุบหมับเคยใช้ เรียกว่า ขั้นต้น ซึ่งโดยวิซาร์ดแล้ว Access จะทำให้ทำงานง่าย แต่ก็อย่างที่เห็นครับ มันยังมีอะไรอีกเยอะที่ไม่ตรงความต้องการเราเท่าไหร่ แต่ทาง Access เองก็ไม่ได้ลืมข้อจำกัดพวกนี้ โดยให้ Access ทุกเวอร์ชั่นสามารถให้ผู้ใช้เขียนข้อกำหนดต่างๆ ได้อย่างยืดหยุ่นตรงความประสงค์ที่สุด ด้วยการแถม VBA มาด้วย

ความต้องการของคุณหมุบหมับ จะบังคับให้คุณหมุบหมับ ยกระดับทั้งความเข้าใจและฝีมือของคุณเองให้เลื่อนจาก "ขั้นต้น" ไปสู่ "ขั้นกลาง" และสู้ขั้นสูงต่อไป

ก่อนจะแนะวิธีต่างๆ (ซึ่งก็มีหลายวิธี) จึงอยากทราบว่า คุณหมุบหมับเองพอจะใช้อะไรได้บ้างแล้ว
- การฝังโค้ดในเหตุการณ์ ทำเป็นหรือเปล่า
- การใช้ มาโคร เป็นหรือไม่ หรือคล่องแค่ไหน
ถ้าให้แนวทางคร่าวๆ จะไปต่อด้วยตัวเองได้หรือเปล่า

แนวทางที่ 1
การกำหนดคุณสมบัติของฟอร์ม ให้แก้ไขข้อมูล (yes / no)
....แนวทางนี้ อาจจะไม่จำเป็นต้องมีปุ่ม save....
คุณสามารถใช้มาโคร หรือเขียนเป็นโค้ด VBA สั่งให้มัน yes หรือสั่งให้มัน No ได้หรือเปล่า

แนวทางที่ 2
การสร้างฟอร์มแบบ unbound control
...แนวทางนี้ จำเป็นอย่างยิ่งต้องมีปุ่ม save....
แนวทางนี้ต้องเขียนโค้ดได้อย่างคล่องจริงๆ เพราะเขียนโค้ดเยอะมากๆ

แนวทางที่ 3
แนวทางนี้ จะมีปุ่ม save หรือไม่มีก็ได้ แล้วแต่ความต้องการ
สองแนวทางข้างต้นสามารถกำหนดข้อจำกัดได้ทั้งฟอร์มหมายความว่า ไม่ว่าบนฟอร์มจะมี คอนโทรลกี่ชนิด หรือกี่ตัวก็ตามสามารถควบคุมได้พร้อมๆ กัน สำหรับแนวทางที่ 3 นี้ ก็คือ เราจะควบคุม, ตรวจสอบ, ป้องกัน ทีละคอนโทรล อย่างเช่น เมื่อผู้ใช้เอาเคอร์เซอร์เข้ามาวางในคอนโทรลตัวนี้ เราก็จะมีโค้ดไว้คอยระวังป้องกันทันที อาจต้องใช้สองเหตุการณ์ควบคู่กัน เช่น onfocus + afterupdate ซึ่งแนวทางนี้ก็ต้องเขียนด้วยโค้ด VBA เช่นกัน


ตอบยาวไปหน่อย หวังว่าคงไม่รำคาญในการอ่าน แต่ว่าสำหรับคำถามนี้ มันก็ต้องตอบแบบนี้แหละครับ ขอให้เข้าใจว่า บางที คำถามสั้นๆ เข้าใจง่ายๆ อาจลำบากมากๆ ในการหาคำจัดความเพื่อจะตอบ
2 @R05998
ขอบคุณสำหรับคำตอบน่ะค่ะ
สำหรับดิฉัน เรื่องaccess คงอยู่ในระดับต้นๆ
การทำมาโครพอทำได้บ้าง แต่ให้เขียนให้คำสั่ง vbaเองคงทำไม่ได้ทั้งหมด
ได้อย่างมากก็แค่เข้าใจว่าโคดนี้ต้องการอะไร
แต่ว่าจะให้เขียนเองคงไม่ได้ค่ะ
ความรู้ขั้นต้นอย่างดิฉัน จะสามารถทำแนวทางที่สามได้ไหมค่ะ

ขอบคุณล่วงหน้าค่ะ
3 @R06007
สมมติว่า คุณมีฟิลด์ข้อมูลชือ Item1
แล้วคุณให้แสดงผลใน textbox ชื่อว่า txItem1 (ควรตั้งชื่อคอนโทรลอย่าให้ซ้ำกับชื่อฟิลด์)

ให้คุณประกาศตัวแปรสาธารณะ ไว้ส่วนบนของโมดูลฟอร์มนี้ก่อน

Option Explicit
Dim tmpFocus As variant
-----------------------------------------

ต่อไปเขียนโค้ดในเหตุการณ์ "เมื่อได้รับโฟกัส" ของคอนโทรลที่เราต้องการ

Private Sub txItem1_gotfocus()
' เก็บข้อมูลเท่าที่มีเข้าตัวแปรก่อนเลย
   tmpFocust=txItem1.text
End sub

ต่อไปดักจับเหตุการณ์ก่อนทีคอนโทรลตัวนี้จะบันทึกข้อมูล ด้วยการเขียนโค้ดฝังในเหตุการณ์ "ก่อนการปรับปรุง"
Private sub txItem1_BeforeUpdate(Cancel as integer)
' อาจจะเพิ่มความยุ่งยากให้ผู้ใช้สักนิดด้วยการใช้ msgbox (ผมไม่แนะนำนัก เพราะผู้ใช้อาจรำคาญได้เมื่อเข้าทำงานส่วนนี้บ่อยๆ แต่ผมเอามาฝากเอามาวางเพื่อให้คุณหมุบหมับเข้าใจ ลำดับเหตุการณ์ง่ายขึ้นเท่านั้น)
if txItem.text<>tmpFocus then
     if msgbox("คุณกำลังแก้ไขข้อมูลจากเดิมคือ " & tmpFocus & vbcrlf & "ยันยืนว่าจะแก้ไขหรือไม่",vbyesno)<>vbYes then cancel=true
end if
tmpFocus=Empty
End sub

โปรดสังเกต
- เราไม่ได้สั่งการกับชื่อฟิลด์เลยนะครับ เราสั่งการกับคอนโทรลเท่านั้น
- ในคอนโทรล 1 ตัวคุณต้องเขียนโค้ดอย่างน้อยๆ 2 เหตุการณ์ (ยิ่งมีคอนโทรลเยอะโค้ดก็ยิ่งเยอะเท่าตัวนะครับ อิอิ)
- อย่างไรก็ตาม ผมอยากให้คุณหมุบหมับมุ่งมั่นที่จะฝึกต่อไป เพื่อก้าวไปสู่อีกขั้นให้ได้ เพราะจริงๆ แล้วความต้องการของคุณหมุบหมับจะได้รับการตอบสนองด้วยดีที่สุด คือวิธี Unbound Control ครับ **
          ** หลักการเดียวกัน กับการเขียนโปรแกรมด้วยภาษาอื่นๆ ที่ไม่มีดาต้าเบสเป็นของตัวเอง เช่น asp, html, java, php, vb ฯลฯ     เขาจะปล่อยให้ผู้ใช้กรอกข้อมูล ปรับเปลี่ยนข้อมูลจนพอใจ ส่วนจะบันทึกหรือไม่บันทึก นั้นขึ้นอยู่กับว่าข้อมูลเหล่านั้นจะผ่านการตรวจสอบหรือไม่ ซึ่งการตรวจสอบทั้งหมด จะกระทำในเหตุการณ์เดียวกันเท่านั้น ซึ่งมักจะเห็นบ่อยๆ คือเมื่อคลิ๊กปุ่ม "บันทึก"
4 @R06101
ขอบคุณมากค่ะ
สำหรับคำแนะนำ
คงใช้วิธีนี้ได้ค่ะ
เพราะคนที่ใช้มีตัวหนูคนเดียว
คงไม่รำคาญไร
ขอบคุณมากๆน่ะค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3165s