กระทู้เก่าบอร์ด อ.Yeadram
1,069 4
URL.หัวข้อ /
URL
ขอถามไอเดียเรื่องเก็บค่าเก่าหน่อยครับ
คือผมทำฟอร์มสำหรับ update ข้อมูล
ทีนี้ผมต้องการนำข้อมูลที่กำลังจะ update เข้าไปใหม่ตรวจสอบกับค่าเดิมก่อนว่าเหมือนกันหรือไม่ (มีหลายฟิลด์) เบื้องต้นก็ได้สร้าง control ขึ้นมาอีกชุดนึงเพื่อใช้เก็บค่าเดิม ...พอก่อนจะ save ผมก็เขียนคำสั่งให้มันตรวจสอบกัน ซึ่งก็ OK อยู่
...แต่ผมรู้สึกว่ามันมี control เยอะไปหน่อย ก็เลยอยากถามว่า กรณีแบบที่ผมว่ามานี้ส่วนใหญ่เขาใช้วิธีแบบไหนกันครับ
1 ใช้วิธีสร้าง controls ขึ้นมาเก็บค่าเก่า(แบบที่ผมใช้)
2 ใช้วิธี query ข้อมูลชุดเดิมมาเช็คก่อน update
3 ใช้การเขียน code และเก็บค่าข้อมูลชุดเดิมไว้ในตัวแปลที่ประกาศก่อน
... หรือวิธีอื่นเลยหนะครับ
ทีนี้ผมต้องการนำข้อมูลที่กำลังจะ 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
2 @R05798
สรุปเบื้องต้นว่าคุณ yeadram แนะนำให้ใช้ event
GotFucus ในการบันทึกค่าเก่าไปยังตัวแปร(ที่ประกาศ) แล้วใช้
AfterUpdate ในการตรวจสอบ ค่าเก่ากับใหม่เพื่อ enable/disbale ปุ่ม save ใช่ใหมครับ
แต่ถ้าเราไป fucus มันซ้ำอีกรอบมันจะงงไหมครับ
GotFucus ในการบันทึกค่าเก่าไปยังตัวแปร(ที่ประกาศ) แล้วใช้
AfterUpdate ในการตรวจสอบ ค่าเก่ากับใหม่เพื่อ enable/disbale ปุ่ม save ใช่ใหมครับ
แต่ถ้าเราไป fucus มันซ้ำอีกรอบมันจะงงไหมครับ
3 @R05799
ขออนุญาติบอกจุดประสงค์หลักหน่อยนะครับ
คือผมไม่ต้องการให้ user บันทึกค่าเดิมซ้ำๆลงไปหนะครับ
เพราะผมจะ gen log ทุกครั้งถ้า user click save
...ทีนี้ผมก็เลยต้องมาหาวิธีตรวจสอบเพื่อให้รู้ว่านี่มันค่าเดิมนี่หว่า ก็จะไม่ให้บันทึก
คือผมไม่ต้องการให้ user บันทึกค่าเดิมซ้ำๆลงไปหนะครับ
เพราะผมจะ gen log ทุกครั้งถ้า user click save
...ทีนี้ผมก็เลยต้องมาหาวิธีตรวจสอบเพื่อให้รู้ว่านี่มันค่าเดิมนี่หว่า ก็จะไม่ให้บันทึก
4 @R05803
งั้นคงต้องใช้วิธีที่ 2 หรือ 3 เข้ามาช่วยแล้วล่ะครับ
จริงๆ ผมก็ไม่คิดว่าจะมี user ที่ซน ถึงกับแกล้งเปลี่ยนข้อมูลไปมา จนมันกลับเป็นข้อมูลเดิมก่อนจะบันทึกนะ
แต่... มันก็อาจจะเป็นไปได้ ... และสาเหตุอาจจะไม่ได้มาจากความ ซน
ดังนั้น ผม (ซึ่งยังไม่เคยใช้วิธีนี้) ขอเชียร์วิธีที่ 2 ครับ เขียนโค้ดสั้นกว่าวิธีที่ 3 แน่ๆ อิอิ
จริงๆ ผมก็ไม่คิดว่าจะมี user ที่ซน ถึงกับแกล้งเปลี่ยนข้อมูลไปมา จนมันกลับเป็นข้อมูลเดิมก่อนจะบันทึกนะ
แต่... มันก็อาจจะเป็นไปได้ ... และสาเหตุอาจจะไม่ได้มาจากความ ซน
ดังนั้น ผม (ซึ่งยังไม่เคยใช้วิธีนี้) ขอเชียร์วิธีที่ 2 ครับ เขียนโค้ดสั้นกว่าวิธีที่ 3 แน่ๆ อิอิ
Time: 0.5989s
-สร้างฟอร์มเลียนแบบฟอร์มบันทึก แล้วกำหนดให้ทุกๆ คอนโทรลเป็น 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 เท่านั้น งานจะทำได้ง่ายไม่สับสน ตามโค้ดก็ง่ายดีครับ ผมเคยลองใช้แล้วดีครับ คือทำฟอร์มเพื่อการบันทึกต่างหาก และเพื่อการแก้ไขก็แยกเป็นอีกฟอร์ม เขียนง่าย แก้ไขง่าย ลำดับงานก็ง่ายครับ แต่.........
มันใช้เวลาเขียนนานไปหน่อย ด้วยความไม่ค่อยขยันจึงไม่นิยมครับ อิอิ