กระทู้เก่าบอร์ด อ.Yeadram
        
           12,465   20		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        อยากให้บันทึกฟอร์ม หลังกดปุ่มบันทึกเท่านั้น      
    
      มือใหม่มากๆ ค่ะ
คือออยากให้ฟอร์มทำการบันทึกข้อมูล ต่อเมื่อ มีการกดบันทึกเท่านั้น ทำได้ไหมคะ
พอดี เผื่อคนอื่นมากดเปลี่ยนข้อมูลในฟิล เกรงว่า รหัสจะเปลี่ยนไปอะไรแบบนี้
เลยอยากให้การเปลี่ยนแปลงข้อมูลนั้นๆ หรือ กรอกข้อมูลใหม่นั้น ๆ จะสมบูรณ์ได้
ต่อเมื่อมีการกดปุ่มบันทึกเท่านั้น
ขอบคุณมาก ๆ ค่ะ
    
  คือออยากให้ฟอร์มทำการบันทึกข้อมูล ต่อเมื่อ มีการกดบันทึกเท่านั้น ทำได้ไหมคะ
พอดี เผื่อคนอื่นมากดเปลี่ยนข้อมูลในฟิล เกรงว่า รหัสจะเปลี่ยนไปอะไรแบบนี้
เลยอยากให้การเปลี่ยนแปลงข้อมูลนั้นๆ หรือ กรอกข้อมูลใหม่นั้น ๆ จะสมบูรณ์ได้
ต่อเมื่อมีการกดปุ่มบันทึกเท่านั้น
ขอบคุณมาก ๆ ค่ะ
				20 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R10274    
        
  
      เมื่อกี้เขียนตอบซ๊ะยาวเหยียด แต่กดส่งไม่ได้ หายไปหมดแล้ว  
 
เอาเป็นว่า ทำตามแล้ว มัน error ค่ะ เดี๋ยวจะไปพยายามทดลองทำใหม่
ขอบคุณมากๆ นะคะ
ปล.
---------------------------------------------------------------------
Option Compare Database
Option Explicit
Dim IsSaveClicked As Boolean
----------------------------------------------------------------------
code นี้เอาวางไว้ที่หัวข้อ General ใช่ไหมคะ
----------------------------------------------------------------------
แล้วปุ่ม SAVE ต้องเปลี่ยนเป็นชื่อ btnSave_Click ใช่ไหมคะ
----------------------------------------------------------------------
-------------------------------------------------------------------------------------
ปุ่ม SAVE อันเก่ามันมีชื่อว่า Command44_Click และมี code อยู่แล้วว่า
(ต้องลบทิ้งออกก่อนไหมคะ)
Private Sub Command44_Click()
On Error GoTo Err_Command44_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_Command44_Click:
Exit Sub
Err_Command44_Click:
MsgBox Err.Description
Resume Exit_Command44_Click
    
End Sub
------------------------------------------------------------------------------------------
ขอบคุณมากๆ ค่ะ
    
    
   
 
เอาเป็นว่า ทำตามแล้ว มัน error ค่ะ เดี๋ยวจะไปพยายามทดลองทำใหม่
ขอบคุณมากๆ นะคะ
ปล.
---------------------------------------------------------------------
Option Compare Database
Option Explicit
Dim IsSaveClicked As Boolean
----------------------------------------------------------------------
code นี้เอาวางไว้ที่หัวข้อ General ใช่ไหมคะ
----------------------------------------------------------------------
แล้วปุ่ม SAVE ต้องเปลี่ยนเป็นชื่อ btnSave_Click ใช่ไหมคะ
----------------------------------------------------------------------
-------------------------------------------------------------------------------------
ปุ่ม SAVE อันเก่ามันมีชื่อว่า Command44_Click และมี code อยู่แล้วว่า
(ต้องลบทิ้งออกก่อนไหมคะ)
Private Sub Command44_Click()
On Error GoTo Err_Command44_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Exit_Command44_Click:
Exit Sub
Err_Command44_Click:
MsgBox Err.Description
Resume Exit_Command44_Click
End Sub
------------------------------------------------------------------------------------------
ขอบคุณมากๆ ค่ะ
        
    3 @R10275    
        
  
      ถาม : code นี้เอาวางไว้ที่หัวข้อ General ใช่ไหมคะ
ตอบ : ใช่ครับ
ถาม : แล้วปุ่ม SAVE ต้องเปลี่ยนเป็นชื่อ btnSave_Click ใช่ไหมคะ
ตอบ : ถ้าเปลี่ยน โค้ดเดิมใน Command44_Click ก็ลบออกไปได้ครับ แต่ถ้าไม่เปลี่ยน คุณก็ย้ายโค้ดใน btnSave_Click ไปแทนโค้ดของเดิมใน Command44_Click ครับ
    
  ตอบ : ใช่ครับ
ถาม : แล้วปุ่ม SAVE ต้องเปลี่ยนเป็นชื่อ btnSave_Click ใช่ไหมคะ
ตอบ : ถ้าเปลี่ยน โค้ดเดิมใน Command44_Click ก็ลบออกไปได้ครับ แต่ถ้าไม่เปลี่ยน คุณก็ย้ายโค้ดใน btnSave_Click ไปแทนโค้ดของเดิมใน Command44_Click ครับ
        
    4 @R10281    
        
  
      แก้ย่อหน้าที่ 2 ในคำตอบ R10266 เป็น
การป้องกันไม่ให้ Access มันบันทึกข้อมูลโดยอัตโนมัติ เราจะกำหนดให้ Cancel argument ใน Form_BeforeUpdate event procedure มีค่าเป็น False ในกรณีที่ผู้ใช้คลิกที่ปุ่มบันทึก แต่ถ้าไม่ ก็กำหนดให้มีค่าเป็น True
    
    
  การป้องกันไม่ให้ Access มันบันทึกข้อมูลโดยอัตโนมัติ เราจะกำหนดให้ Cancel argument ใน Form_BeforeUpdate event procedure มีค่าเป็น False ในกรณีที่ผู้ใช้คลิกที่ปุ่มบันทึก แต่ถ้าไม่ ก็กำหนดให้มีค่าเป็น True
        
    5 @R10318    
        
  
       โอ้ นั่ง งม อยู่ หลายวัน ในที่สุดก็ได้แล้วเจ้าค่า
ขอบคุณ คุณ สันติสุข ม๊ากกก มาก น๊าค๊า 
 
    
    
  ขอบคุณ คุณ สันติสุข ม๊ากกก มาก น๊าค๊า
 
 
        
    6 @R10320    
        
  
      ..    
    
  
        
    7 @R10321    
        
  
      สวัสดีครับพี่ ผมพึ้งเริ่มหัดเขียนครับรบกวนขอถามอะไรหน่อยครับ
คืนผมมี ตารางชื่อData ประไปด้วยฟิวด์ A B C D และมีฟอร์มชื่อAddDataประกอบไปด้วยtextbox t1 t2 t3 t4 ผมดึงข้อจากตารางมาโชว์อัตโนมัติบนฟอร์มAddDataนี้ทุกครั้งเมื่อเปิดฟอร์มAddDataมาครับโดยที่ให้ข้อมูลในฟิวด์A มาโชว์บนtextbox t1 B=t2 C=t3 D=t4 ตามลำดับครับ (ข้อมูลในตารางDataนั้นจะมีการใส่ข้อมูลเพียงแค่เรคคอสเดียวตลอดครับจะไม่มีการเพิ่มข้อมูลอีก)
ถ้างง ผมต้องขอโทษด้วยนะครับ ผมมือใหม่มากๆเลยครับพี่
    
  คืนผมมี ตารางชื่อData ประไปด้วยฟิวด์ A B C D และมีฟอร์มชื่อAddDataประกอบไปด้วยtextbox t1 t2 t3 t4 ผมดึงข้อจากตารางมาโชว์อัตโนมัติบนฟอร์มAddDataนี้ทุกครั้งเมื่อเปิดฟอร์มAddDataมาครับโดยที่ให้ข้อมูลในฟิวด์A มาโชว์บนtextbox t1 B=t2 C=t3 D=t4 ตามลำดับครับ (ข้อมูลในตารางDataนั้นจะมีการใส่ข้อมูลเพียงแค่เรคคอสเดียวตลอดครับจะไม่มีการเพิ่มข้อมูลอีก)
ถ้างง ผมต้องขอโทษด้วยนะครับ ผมมือใหม่มากๆเลยครับพี่
        
    8 @R10322    
        
  
      คำถามคืออะไรครับ ที่เขียนมามีแต่ประโยคบอกเล่า !    
    
  
        
    9 @R10325    
        
  
      อยากได้code นะครับพี่ ขอโทษทีนะครับพิมพ์ตก เยอะไปหน่อยครับ    
    
  
        
    10 @R10326    
        
  
      ผมอยากได้codeดึงข้อมูลจากตารางมาโชว์อัตโนมัติบนฟอร์ม*    
    
  
        
    11 @R10332    
        
  
      ในระดับฟอร์ม ไปกำหนด RecordSource property ให้เป็นชื่อ Data, Allow Additions property ให้เป็น No, Allow Deletions property ให้เป็น No
ในระดับคอนโทรล ให้กำหนด ControlSource property ของ t1 ให้เป็น A, t2 ให้เป็น B, ...
ถ้าไม่อยากให้แก้ไขข้อมูลได้ ทำได้ 2 วิธีคือ
1) ในระดับฟอร์ม กำหนด Allow Edits property ให้เป็น No
หรือ
2) ในระดับคอลโทรล กำหนด Locked property ให้เป็น No
ไม่ต้องมีการโค้ดใดๆครับ
    
  ในระดับคอนโทรล ให้กำหนด ControlSource property ของ t1 ให้เป็น A, t2 ให้เป็น B, ...
ถ้าไม่อยากให้แก้ไขข้อมูลได้ ทำได้ 2 วิธีคือ
1) ในระดับฟอร์ม กำหนด Allow Edits property ให้เป็น No
หรือ
2) ในระดับคอลโทรล กำหนด Locked property ให้เป็น No
ไม่ต้องมีการโค้ดใดๆครับ
        
    12 @R10353    
        
  
      ได้แล้วครับๆ ขอบคุณ คุณสันติสุข มากๆเลยครับ    
    
  
        
    13 @R16040    
        
  
      กำหนดให้ Cancel argument ใน Form_BeforeUpdate event procedure มีค่าเป็น True หรือ False   ทำอย่างไรครับ    
    
  
        
    14 @R16044    
        
  
      ปกติถ้าเราไม่กำหนดอะไร มันจะเป็น False อยู่แล้ว แต่ถ้าเราต้องการไม่ให้ผ่าน Form_BeforeUpdate event เราก็เพียงเขียนว่า Cancel = True ครับ    
    
  
        
    15 @R16069    
        
  
      ขอบพระคุณอาจารย์มากครับ  เรื่องบางเรืองที่คนบางคนไม่เข้าใจอาจเป็นเรื่องใหญ่สำหรับเค้า อาจารย์เหมือนแสงไฟที่นำแสงสว่างมาให้ครับ ขอความดีอันนี้จงเกื้อหนุนให้อาจารย์เจริญยิ่ง ๆ ขึ้นไป เทอญ    
    
  
        
    16 @R21928    
        
  
      ถึงอาจารย์สันติสุขครับ
ผมใช้วิธีการเขียน code ที่อาจารย์เขียนไว้กับ application หลายตัวและได้ผลมาตลอด แต่ล่าสุดเขียน application ขึ้นมาใหม่อีกตัวหนึ่งซึ่งมีรูปแบบคล้ายๆกับทีเคยเขียนมาแต่กลับพบปัญหาที่ event before update ซึ่งใส่ code "Cancel = Not IsSaveClicked" โดยไม่สามารถเลื่อนตัวชี้ record ไปที่อื่นๆได้เลย อีกทั้งยังไม่สามารถใช้ combo box เพื่อ search หา record ได้เลยครับขอให้อาจารย์ช่วยดูไฟล์ที่ทำขึ้นได้หรือไม่ครับตอนนี้จนปัญญาจริงๆ
    
  ผมใช้วิธีการเขียน code ที่อาจารย์เขียนไว้กับ application หลายตัวและได้ผลมาตลอด แต่ล่าสุดเขียน application ขึ้นมาใหม่อีกตัวหนึ่งซึ่งมีรูปแบบคล้ายๆกับทีเคยเขียนมาแต่กลับพบปัญหาที่ event before update ซึ่งใส่ code "Cancel = Not IsSaveClicked" โดยไม่สามารถเลื่อนตัวชี้ record ไปที่อื่นๆได้เลย อีกทั้งยังไม่สามารถใช้ combo box เพื่อ search หา record ได้เลยครับขอให้อาจารย์ช่วยดูไฟล์ที่ทำขึ้นได้หรือไม่ครับตอนนี้จนปัญญาจริงๆ
        
    17 @R21929    
        
  
      อัพโหลดไปที่ไหนสักแห่ง แล้วผมจะดูให้ ถ้าแปลงเป็น Access 2003 ได้ก็จะดีครับ แต่ถ้าไม่ได้ก็ไม่เป็นไร    
    
  
        
    18 @R21931    
        
  
      อาจารย์ครับผมรู้สึกว่ามันน่าจะเกิดจากการเขียน code ที่ event on current ครับเลยทำการลบออกที่ตัวครับ พอลบออกใช้ได้เลยและไม่กระทบกับการทำงานที่ on current แต่อย่างได (รู้สึกว่า code ที่ลบออกไปเกินความจำเป็น) สรุปว่า code สำหรับ save record ของอาจารย์สมบูร์อยู่แล้วครับ    
    
  
        
    19 @R23689    
        
  
      ผมลองทำตามโค๊ดที่อาจารย์สันติสุขให้มาทำได้แล้วครับ แต่ติดปัญหาว่า ตอนเพิ่ม sub ฟอร์มเข้าไป พอพิมพ์ข้อมูลในฟอร์มหลักเสร็จ มันไม่สามารถพิมพ์ข้อมูลใน sub ฟอร์มได้ครับ    
    
  
        
    20 @R23690    
        
    
      โค้ดนี้ทำงานเฉพาะฟอร์มเดี่ยวๆเท่านั้น ใช้กับฟอร์มที่มีซับฟอร์มไม่ได้ครับ กระทู้ในลิงค์ http://www.thai-access.com/yeadram_view.php?topic_id=5190 จะเหมือนกับที่คุณถาม ลองดูวิธีการที่ผมใช้ในงานของผมในคำตอบ R22423 ครับ
หรือไม่ก็อาจใช้วิธีผูกเมนฟอร์มและซับฟอร์มเข้ากับเทเบิลชั่วคราวก่อน พอกดปุ่ม Save ก็ค่อยก็อปปี้ไปเทเบิลจริงอีกที ดูที่ อ. yeadram เขียนใน http://www.thai-access.com/yeadram_view.php?topic_id=2443 นะครับ
    
  หรือไม่ก็อาจใช้วิธีผูกเมนฟอร์มและซับฟอร์มเข้ากับเทเบิลชั่วคราวก่อน พอกดปุ่ม Save ก็ค่อยก็อปปี้ไปเทเบิลจริงอีกที ดูที่ อ. yeadram เขียนใน http://www.thai-access.com/yeadram_view.php?topic_id=2443 นะครับ
      Time: 0.1102s
    
      
		
การป้องกันไม่ให้ Access มันบันทึกข้อมูลโดยอัตโนมัติ เราจะกำหนดให้ Cancel argument ใน Form_BeforeUpdate event procedure มีค่าเป็น True หรือ False ขึ้นกับว่าได้คลิกที่ปุ่มบันทึกหรือไม่ เมื่อเป็น True ฟอร์มจะบันทึกข้อมูลให้ แต่เมื่อเป็น False (เป็นค่า default) ฟอร์มจะไม่บันทึกให้
ดังนั้นเราจะมีตัวแปรหนึ่งตัวเป็นประเภท boolean ที่อยู่ในระดับ module โดยสมมุติว่ามันชื่อ IsSaveClicked เมื่อไหร่ก็ตามที่คลิกปุ่มบันทึก เราจะกำหนดให้ตัวแปรนี้มีค่าเป็น True และสั่งบันทึกข้อมูลซึ่งจะกระตุ้นให้เกิด Form_BeforeUpdate event ใน event นี้ก็ตรวจว่าถ้า IsSaveClicked = True ก็ยอมให้บันทึกได้ ซึ่งก็คือให้ Cancel argument เป็น False แต่ถ้าไม่ ก็กำหนดค่าเป็นตรงกันข้าม ดังนั้นมันก็จะบันทึกเมื่อเราคลิกปุ่มบันทึกเท่านั้น หลังจากบันทึกแล้ว เราก็ต้องกำหนดให้ตัวแปรนี้มีค่ากลับมาเป็น False โดยการใช้ Form_AfterUpdate event procedure นอกจากนี้เพิ่อป้องกันความผิดพลาดที่อาจเกิดขึ้นได้ระหว่างการบันทึกจึงต้องดักว่าถ้าเกิด Form_Error event เมื่อไหร่ก็ให้ตั้งค่าตัวแปรกลับเป็น False เช่นกัน
พูดมายืดยาว โค้ดก็สั้นๆเองครับ
Option Compare Database
Option Explicit
Dim IsSaveClicked As Boolean
Private Sub Form_Error(DataErr As Integer, Response As Integer)
IsSaveClicked = False
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Cancel = Not IsSaveClicked
End Sub
Private Sub Form_AfterUpdate()
IsSaveClicked = False
End Sub
Private Sub btnSave_Click()
IsSaveClicked = True
Me.Dirty = False ' สั่งให้บันทึกข้อมูล
End Sub