ขอถามไอเดียเรื่องเก็บค่าเก่าหน่อยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,073   4
URL.หัวข้อ / URL
ขอถามไอเดียเรื่องเก็บค่าเก่าหน่อยครับ

คือผมทำฟอร์มสำหรับ update ข้อมูล
ทีนี้ผมต้องการนำข้อมูลที่กำลังจะ update เข้าไปใหม่ตรวจสอบกับค่าเดิมก่อนว่าเหมือนกันหรือไม่ (มีหลายฟิลด์) เบื้องต้นก็ได้สร้าง control ขึ้นมาอีกชุดนึงเพื่อใช้เก็บค่าเดิม ...พอก่อนจะ save ผมก็เขียนคำสั่งให้มันตรวจสอบกัน ซึ่งก็ OK อยู่

...แต่ผมรู้สึกว่ามันมี control เยอะไปหน่อย ก็เลยอยากถามว่า กรณีแบบที่ผมว่ามานี้ส่วนใหญ่เขาใช้วิธีแบบไหนกันครับ
1 ใช้วิธีสร้าง controls ขึ้นมาเก็บค่าเก่า(แบบที่ผมใช้)
2 ใช้วิธี query ข้อมูลชุดเดิมมาเช็คก่อน update
3 ใช้การเขียน code และเก็บค่าข้อมูลชุดเดิมไว้ในตัวแปลที่ประกาศก่อน
... หรือวิธีอื่นเลยหนะครับ

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

1 @R05797

-สร้างฟอร์มเลียนแบบฟอร์มบันทึก แล้วกำหนดให้ทุกๆ คอนโทรลเป็น unbound
-มีปุ่มเลื่อนเรคคอร์ดหรือปุ่มโหลดข้อมูล
-เมื่อถูกกด ให้โหลดข้อมูลเรคคอร์ดที่ต้องการ เอามาโปรยลงในคอนโทรลแต่ละตัว (เขียนเป็นโปรแกรมย่อย เช่น subLoad)
   - - ถ้าเป็นปุ่มเลื่อนเรคคอร์ด ก็คำนวนลำดับเรคคอร์ดแล้วโหลดได้เลย
   - - ถ้าเป็นปุ่มโหลด ก็อาจจะมี inputbox มาให้กรอกว่าจะเลือกโหลดเรคคอร์ดใด



public Edited as boolean
public TmpVa
public Recnum as long


form_current
if me.currentrecord<>Recnum then
Edited=false
Recnum=me.currentrecord
End if
cmdSave.enabled=Edited
End sub


'------ คอนโทรลตัวที่ 1 ------
text1_gotfocus()
tmpva=text1.text
end sub

text1_afterupdate()
if text1<>tmpva then edited=true
end sub
'------จบ คอนโทรลตัวที่ 1 ---------

'------ คอนโทรลตัวที่ 2 ------
text2_gotfocus()
tmpva=text2.text
end sub

text2_afterupdate()
if text2<>tmpva then edited=true
end sub
'------จบ คอนโทรลตัวที่ 2 ---------



'------ คอนโทรลตัวที่ 3 ------
'------ คอนโทรลตัวที่ 4 ------
'------ คอนโทรลตัวที่ 5 ------
    ฯลฯ




cmdSave_click()
if edited=true then
    ----เขียนเป็น statement เพื่อ update ข้อมูลใส่ตาราง--
    ---- สั่งรัน statement ----
' ---- อาจเพิ่มงาน เรียกใช้โปรแกรมย่อยอีกตัวหนึ่ง เพื่อล้างข้อมูลออกจากฟอร์ม (เช่น subClear)
end if

edited=false
me.controls(0).getfocus
form_current
end sub

cmdReset_click()
เรียกใช้โปรแกรมย่อย subLoad
end sub

cmdClear_click
เรียกใช้โปรแกรมย่อยอีกตัวหนึ่ง เพื่อล้างข้อมูลออกจากฟอร์ม (เช่น subClear)
End sub


ถ้าคิดว่าจะใช้ฟอร์มนี้เพื่อการ Edit เท่านั้น งานจะทำได้ง่ายไม่สับสน ตามโค้ดก็ง่ายดีครับ ผมเคยลองใช้แล้วดีครับ คือทำฟอร์มเพื่อการบันทึกต่างหาก และเพื่อการแก้ไขก็แยกเป็นอีกฟอร์ม เขียนง่าย แก้ไขง่าย ลำดับงานก็ง่ายครับ แต่.........
มันใช้เวลาเขียนนานไปหน่อย ด้วยความไม่ค่อยขยันจึงไม่นิยมครับ อิอิ
2 @R05798
สรุปเบื้องต้นว่าคุณ yeadram แนะนำให้ใช้ event
GotFucus ในการบันทึกค่าเก่าไปยังตัวแปร(ที่ประกาศ) แล้วใช้
AfterUpdate ในการตรวจสอบ ค่าเก่ากับใหม่เพื่อ enable/disbale ปุ่ม save ใช่ใหมครับ

แต่ถ้าเราไป fucus มันซ้ำอีกรอบมันจะงงไหมครับ

3 @R05799
ขออนุญาติบอกจุดประสงค์หลักหน่อยนะครับ
คือผมไม่ต้องการให้ user บันทึกค่าเดิมซ้ำๆลงไปหนะครับ
เพราะผมจะ gen log ทุกครั้งถ้า user click save

...ทีนี้ผมก็เลยต้องมาหาวิธีตรวจสอบเพื่อให้รู้ว่านี่มันค่าเดิมนี่หว่า ก็จะไม่ให้บันทึก
4 @R05803
งั้นคงต้องใช้วิธีที่ 2 หรือ 3 เข้ามาช่วยแล้วล่ะครับ
จริงๆ ผมก็ไม่คิดว่าจะมี user ที่ซน ถึงกับแกล้งเปลี่ยนข้อมูลไปมา จนมันกลับเป็นข้อมูลเดิมก่อนจะบันทึกนะ
แต่... มันก็อาจจะเป็นไปได้ ... และสาเหตุอาจจะไม่ได้มาจากความ ซน
ดังนั้น ผม (ซึ่งยังไม่เคยใช้วิธีนี้) ขอเชียร์วิธีที่ 2 ครับ เขียนโค้ดสั้นกว่าวิธีที่ 3 แน่ๆ อิอิ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3252s