รบกวนขอวิธี back up ด้วย vba ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,888   6
URL.หัวข้อ / URL
รบกวนขอวิธี back up ด้วย vba ครับ

ผมลองใช้
Filecopy กับ DBEngine.CompactDatabase กับอีเวนท์ตอนปิดฟอม
แต่มันไม่ผ่านครับ พอมีวิธีอื่นมั้ยครับ
ขอบคุณครับ

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

1 @R15365
ไม่มีที่มาที่ไป อ่านแล้วไม่รู้เรื่องอ่ะครับ
2 @R15366
คือผมต้องการให้ระบบมันแบคอัพตอนปิดโปรแกรมอ่ะครับ
เลยลองใส่โคด อีเวนตอนที่ปิดโปรแกรม
Filecopy CurrentDB.Name,"C:\MyDBbackup"
แต่มันไม่ผ่านครับ เลยลองใช้
DBEngine.CompactDatabase CurrentDB.Name,"C:\MyDBbackup"
ผลก็ได้เหมือนกันคือ ระบบแจ้งเตือนว่าเราเปิดใช้งานตัวไฟล์อยู่ เลยทำการก๊อปปีไม่ได้
พอมีวิธีอื่นมั้ยครับ
ขอบคุณครับ
3 @R15367
เราไม่สามารถ backup (หรือ copy) ตัวเองในขณะที่ตัวเองทำงานอยู่ครับ ที่พอทำกันได้ก็คือ ไปเรียกอีกโปรแกรมที่ทำหน้า backup (หรือ copy) แล้วเราออกจากโปรแกรมทันทีเพื่อจะได้ไม่อยู่ในสถานะการใช้งานอยู่ โปรแกรมที่ทำหน้าที่ backup (หรือ copy) จะเป็นสคริปท์ภาษาอื่นหรือจะเป็น Access อีกโปรแกรมก็ได้ครับ และควรจะเช็คว่ามีไฟล์ .ldb (สำหรับ Access ต่ำกว่า 2007) หรือ .laccdb (สำหรับ Access ตั้งแต่ 2007 ขึ้นไป) เปิดอยู่หรือไม่ ถ้ายังเปิดอยู่ก็ต้องรอจนกว่าจะปิดหรือเกินระยะเวลาที่เราอยากรอด้วยครับ
4 @R15368
มีคำถามประเภทนี้ค่อนข้างเยอะครับ เกี่ยวกับการสำรองข้อมูลขณะที่เปิดใช้งานอยู่ ซึ่งเป็นธรรมชาติของไฟล์ที่ถูกเปิดโหลดใช้งานอยู่ มันจะไม่ยอมให้ ลบ ย้าย หรือก๊อปปี้ ไฟล์เหล่านั้นได้ครับ
แต่หากว่าคุณต้องการสำรองข้อมูลแบบการ copy หลังปิดโปรแกรมจริงๆ มันมีเทคนิคอยู่ คือคุณต้องทำให้มันเป็น Back End ซะ คุณก็จะสามารถ copy ในส่วนของ Back End ได้ โดยเรียกคำสั่งจาก Front End ตัวอย่างเช่น
หากผมทำไฟล์ที่ต้องการ Backup เป็น Back End ชื่อ B.mdb โดยอยู่พาธเดียวกับไฟล์ Front End ที่ใช้เรียกใช้งานชื่อ A.mdb ผมสามารถเขียนโค๊ดบนไฟล์ A.mdb เพื่อ Copy สำรองไฟล์ B.mdb โดยใช้ชื่อไฟล์ใหม่ว่า TTT.mdb โดยจะใช้ใน Event ไหน หรือสร้างเป็นปุ่มก็ได้ ประมาณนี้ครับ

    Dim oFSO As Object
    Dim strDestination As String
    
    strDestination = "D:\TTT.mdb"    
    DBEngine.Idle
    
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    oFSO.CopyFile CurrentProject.path & "B.mdb", strDestination
    Set oFSO = Nothing
       
    'Compact ไฟล์ใหม่ด้วย
    Name strDestination As strDestination & ".cpk"
    DBEngine.CompactDatabase strDestination & ".cpk", strDestination
    Kill strDestination & ".cpk"

เทคนิคคือการใช้ลักษณะของ Split Database เพื่อที่แยก Back end กับ Front End แล้วจึงสามารถสำรองฐานข้อมูลใน Back end ขณะใช้งานอยู่ได้

ปล. ผมไม่เคยใช้แบบจริงจัง แต่เท่าที่ทดสอบดูก็ใช้ได้ดีครับ
5 @R15369
ขอบคุณครับ
6 @R15370
ปัจจุบันผมใช้ Bat.file สั่งให้ Zip แล้วไปเก็บในที่ต้องการ
ผมขอเอาแบบนี้ไปใช้บ้างครับ แต่ถ้าเพิ่มคำสั่งให้ Zip ด้วย
จะดีมากเลยครับ อาจารย์TT ^^
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2960s