ขอโค้ดสำหัรบ Backup Access ทั้งฐานข้อมูลค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 4,172   14
URL.หัวข้อ / URL
ขอโค้ดสำหัรบ Backup Access ทั้งฐานข้อมูลค่ะ

หนูค้นหาดูเรื่อง Backup ในบอร์ดนี้ก็มีอยู่เหมือนกันแต่ ไม่ตรงกับที่หนูอยากทำค่ะ
คือหนู มีฐานข้อมูลอยู่ 1 ตัว สมมติว่าชื่อ Database1 ซึ่งมีฟอร์มหลักแบบทั่วไปค่ะ
ที่ฟอร์มหลักดังกล่าว หนูก็จะทำปุ่มไว้สำหรับให้ผู้ใช้ คลิก เมื่อต้องการจะ Backup ไฟล์ฐานข้อมูลค่ะ
แนวคิดที่หนูต้องการก็คือ ในการ Backup นั้นอยากให้มัน Backup ไปทั้งไฟล์ฐานข้อมูลDatabase1 เลยค่ะ เป็นเหมือนกับการ Copy ไปทั้งไฟล์ พร้อมทั้งข้อมูลด้วย โดยให้มันสร้างโฟลเดอร์ และ ไฟล์ฐานข้อมูลที่ปลายทางที่ไดร์ฟ C ขึ้นมาใหม่ดังนี้ค่ะ C:\ Backup \ Database2 ส่วนไฟล์ต้นทางนั้นขณะ Backup จะอยู่ที่ไดร์ฟไหนก็ได้ไม่จำกัดค่ะ
จุดประสงค์ก็เพื่อในวันหน้า สมมติไฟล์Database1 เกิดเสียหายขึ้นมา ก็สามารถหยิบเอาไฟล์ Database2 ที่Backup เอาไว้มาใช้แทนได้เลยทันทีค่ะ
ขอขอบคุณไว้ล่วงหน้าเลยนะคะ

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

1 @R03056
ลองดูเหมือนกระทู้นี้หรือเปล่า
http://www.thai-access.com/yeadram_view.php?topic_id=266
2 @R03057
เคยเข้าไปดูแล้วค่ะอาจารย์ ใช่เกือบทั้งหมด แต่ติดตรงที่ไฟล์ต้นทางเขากำหนดไว้เฉพาะที่ไดร์ฟ C เท่านั้น มันไม่ยืดหยุ่นค่ะ หนูอยากให้เป็นแบบว่า ไฟล์ต้นทางนั้นจะอยู่ที่ไดร์ฟไหนก็ได้ ไม่จำเป็นต้องไดร์ฟ C เท่านั้น ยกเว้นไฟล์ปลายทางที่เจาะจงว่าจะต้องอยู่ที่ไดร์ฟ C เท่านั้น หนูพยายามลองปรับแก้แล้วไม่สำเร็จ ก็เลยต้องมาตั้งกระทู้ขอความช่วยเหลือใหม่อีกค่ะ
3 @R03058
ที่ TopicID=266 นั้นมีบรรทัดหนึ่งที่ อ. เขาเขียนเอาไว้อย่างนี้
fCopy "C:\ocche\dataocc.mdb", "C:\backupocche\dataocc.mdb"
หนูอยากได้ แบบไม่ฟิกส์ว่า จะต้อง "C: เท่านั้นค่ะ ไม่ทราบว่าต้องแก้ไขอย่างไรคะ
4 @R03059
เพิ่มเติมค่ะ พอหนูแก้ไข แบบไม่ระบุไดร์ฟต้นทางที่เก็บไฟล์แหล่งข้อมูล มันก็จะ Error ตามในภาพค่ะ



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

D:\network's share\j.mdb
อย่างตัวอย่างนี้ มีทั้ง อโพสโตฟี มีทั้ง space

ขอดูตัวอย่าง ค่าของตัวแปรที่ส่งเข้าไปได้ไหมครับ
และช่วย capture คำที่มันฟ้องได้ไหมครับ ว่ามันฟ้องว่าอะไร
6 @R03063
โค้ดด้านล่างนี้หนูได้คัดลอกมาจาก D=1&TopicID=266 ซึ่งมีสมาชิกถามเอาไว้ในบอร์ดนี้แหละค่ะ หนูดูแล้วมันตรงกับที่หนูอยากได้พอดี ก็เลยลองนำมาใช้ค่ะ

อันนี้เป็นโมดูลค่ะ
Function fCopy(strDest As String, strSrc As String)
Dim fs As Object, strTime As String
Set fs = CreateObject("Scripting.FileSystemObject")
fs.copyfile strDest, strSrc, True
End Function


อันนี้เป็นคำสั่งที่ปุ่มบนฟอร์มค่ะ
Private Sub Command0_Click()
        Dim fold
        Set fold = CreateObject("Scripting.FileSystemObject")
        newFDR = "C:\backupocche"
        If Not fold.FolderExists(newFDR) Then
        fold.CreateFolder (newFDR)
        End If
        If MsgBox("ต้องการสำรองข้อมูล...", vbQuestion + vbOKCancel, "แจ้ง") = vbOK Then
        fCopy "C:\ocche\dataocc.mdb", "C:\backupocche\dataocc.mdb"
        MsgBox "สำรองเรียบร้อยแล้วเก็บอยู่ที่ C:\backupocche\dataocc.mdb", vbOKOnly, "แจ้ง"
        End If
End Sub


โค้ดและโมดูลดังกล่าวมันก็ใช้งานได้ปกติดีค่ะ แต่พอหนูนำบรรทัดสีแดงมาดัดแปลงเป็น
[red]fCopy "CurrentDb", "C:\backupocche\dataocc.mdb"

ความต้องการก็เพื่อจะให้ตำแหน่งไฟล์ต้นทางนั้นไม่มีข้อจำกัดว่าจะอยู่ที่ไดร์ฟไหนก็ได้ค่ะ มันก็เลยขึ้น error ตามภาพตัวอย่างค่ะและไม่มีคำเตือนอื่นใดอีก หนูเข้าใจว่าคงจะผิดตรง CurrentDb นี่แหละค่ะ ไม่ทราบว่าจริงๆแล้วนำมาใช้ได้หรือไม่

7 @R03064
1 ให้คุณมาลี ไปดูหัวข้อ "นำเข้าข้อมูลครั้งละหลายตารางจากฐานข้อมูลอื่น "
   ที่มีการ สร้างปุ่มคำสั่ง cmdBrowseSource เพื่อแสดง path และฐานข้อมูลที่ต้องการ จะ copy ใน     textbox สมมุติชื่อ txtPathSource
2 นำ path ที่ได้จาก txtPathSource ไปแทนที่ ตรง "CurrentDB"
3 ถ้าอยากได้ว่า เอาไปวางไว้ตรงไหน ก็ได้ ก็ควรสร้าง เหมือนข้อ 1
สร้างปุ่ม cmdBrowseDestination และ txtPathDestination เมื่อกด cmdBrowseDestination จะเลือก path ที่ต้องการ นำมาไว้ใน txtPathDestination
5 สุดท้ายเมื่อได้ txtPathDestination ก็นำมาแทนที่
   fCopy txtPathSource, txtPathDestination

คุณมาลีต้องทำการบ้าน ก่อนนะครับ โดยกลับไปอ่านหัวข้อที่ผ่านมา
แล้วสร้าง Command Button และ textbox 2 ชุด ชื่อ
1 cmdBrowseSource และ txtPathSource
2 cmdBrowseDestination และ txtPathDestination
8 @R03065
ขอขยายเพิ่มเติมอีกนิดนึงค่ะอาจารย์
อาจมีคำถามว่า
"อ้าว..ก็ในเมื่อโค้ดและโมดูลเดิมที่เขาให้มามันก็ใช้งานได้ปกติดี แล้วจะไปดิ้นรนแก้ไขทำไมอีก"
คำตอบก็คือ ไฟล์ที่เป็นแหล่งข้อมูลหรือไฟล์ต้นทางนั้น บางทีผู้ใช้เขาก็ไม่ได้เก็บไว้ที่ไดร์ฟ C เสมอไป และบางครั้งก็ยังไปเก็บในโฟลเดอร์ต่างๆอีก นี่แหละคือปัญหาที่หนูพยายามหาวิธีว่า ทำอย่างไรจะให้ปลดล็อกตรงนี้ได้ว่า ไม่ว่าผู้ใช้จะนำไฟล์แหล่งข้อมูลต้นทางไปไว้ที่ไหนหรือแม้จะแก้ไขชื่อไฟล์เป็นอะไร ก็ให้สั่ง Backup ได้ทั้งหมด ก็เลยลองเดาแบบมั่วๆใช้คำสั่ง CurrentDb ผลมันก็คือไม่สำเร็จค่ะ
รบกวนอาจารย์ช่วยหนูด้วยนะคะ
9 @R03066
พอดีอาจารย์ ditasilk โพสเข้ามาก่อนหน้าหนูนิดเดียว ขอบคุณค่ะอาจารย์
เดี๋ยวหนูจะลองไปค้นหาดูตามที่ท่านแนะนำค่ะ
10 @R03067
ผมอ่านความต้องการแล้ว ยังไม่ค่อยแน่ใจว่าที่ออกแบบไว้เป็นอย่างไร แต่ผมจะขอเตือนหน่อยว่า หากคิดจะ backup ไฟล์ในระบบ Access ต้องแน่ใจว่าไฟล์นั้นไม่มีคนใช้ รวมทั้งตัวเราเองก็ต้องไม่ได้ใช้มันด้วย ไม่เช่นนั้น อาจได้ไฟล์ที่

1) เสีย ใช้ไม่ได้ (แต่เรานึกว่าใช้ได้ เพราะมัน backup ได้)

2) ข้อมูล Inconsistency (ไม่รู้แปลเป็นไทยว่าอย่าง??ร แต่ผมขอเรียกว่า "ไม่คงเส้นคงวา" แล้วกัน) อย่างเช่น ระบบเราตั้งใจว่า ทุกๆเรคอร์ดของ "ใบส่งของ" จะต้องมีเรคอร์ดของ "รายการส่งของ" แต่เราอาจ backup แล้ว ได้เป็นว่า บาง "ใบส่งของ" ไม่มี "รายการส่งของ" หรือมีเพียงบางรายการ หรือมีรายการที่แตกต่างไปจากความเป็นจริง

ดังนั้น เราสร้างฟอร์มใน frontend เพื่อ backup ฐานข้อมูลที่เป็น backend ของมันเอง ก็ลองพิจารณาดีๆแล้วกันครับ
11 @R03073
ดูจากคำแนะนำของอาจารย์สันติสุขแล้ว หนูชักไม่แน่ใจแล้วว่าจะเดินหน้าต่อดีหรือไม่ เพราะมันจะเข้าตำราว่าได้ไม่คุ้มเสียหรือเปล่า
ขอบคุณค่ะอาจารย์ที่กรุณาให้สติ
12 @R03074
ผมกลับไปทบทวนความต้องการ ของคุณมาลี และอ่าน ข้อ R03057
ผมคิดว่า ถ้าคุณมาลี อยากทดลอง เขียน ตามความต้องการของตัวเองเพื่อหาประสบการณ์ และความรู้ เทคนิค รวมถึงปัญหาที่จะเกิดตามมาภายหลัง ก็สามารถทดลองทำได้ครับ (เน้นองค์ความรู้ที่จะได้รับ)
โปรแกรมที่จะนำไปใช้จริง ต้องผ่านการทดลอง ถึงความถูกต้องของข้อมูล
ตามที่ อ.สันติสุขแนะนำ ซึ่งโดยหลักการ ต้องเปิดฐานข้อมูลแบบ exclusive
ถ้าเปิดไม่ได้แสดงว่ามี user อื่นกำลังใช้งานอยู่ ไม่ควรอย่างยิ่งจะ back up
และการ back up ควรตั้งชื่อระบุ ปีเดือนวัน หรือเวลา ที่backup ไว้ จะได้รู้ว่า
ข้อมูลไหน update และการ backup ควรทำเป็นประจำ
สิ่งหนึ่งที่อยาก ชื่นชม คุณมาลี คือ ทุกคำถาม คุณมาลีติดตามและตามติด จนกว่าจะได้รับคำตอบที่ดี เป็นที่น่าพอใจ และอีกประการ มีการทำการบ้าน จนมีคำถาม มาถามอยู่เรื่อย ๆ ทำให้ผู้รู้ และ อาจารย์ ทุกท่าน ร่วมด้วยช่วยกันตอบ   ดีครับ
13 @R03081
ขอบคุณอาจารย์ ditasilk ที่กรุณาให้คำชมและให้กำลังใจหนูค่ะ
หนูสนใจคำแนะนำของท่านตรงที่ว่า
การ back up ควรตั้งชื่อระบุ ปีเดือนวัน หรือเวลา ที่backup ไว้ จะได้รู้ว่า
ข้อมูลไหน update และการ backup ควรทำเป็นประจำ

งั้นชื่อของไฟล์ที่ Backup ออกไปแต่ละครั้งเราจะใช้ =now() ได้หรือไม่ และใช้อย่างไรคะ
ตอนนี้หนูเกิดไอเดียร์ใหม่ว่าจะให้ระบบมันทำการ Bacup ทุกครั้งที่เริ่มโหลดฟอร์มหลัก เพราะแน่นอนว่าขณะนั้นจะยังไม่มีการคีย์ข้อมูลใดๆอย่างแน่นอน และข้อมูลที่มีการคีย์หลังจากโ??ลดฟอร์มหลักแล้ว ก็ต้องปล่อยให้ตกขบวนไปบ้าง รอให้ไป Backup ครั้งต่อไปเมื่อมีการเปิดโปรแกรมในครั้งหน้าที่เริ่มโหลดฟอร์มหลักค่ะ เพราะฐานข้อมูลนี้จะใช้ครั้งละเพียงคนเดียวเท่านั้น ไม่มี LAN ค่ะ
แต่ว่าตอนนี้หนูยังแก้ปัญหาเรื่อง ตำแหน่งไฟล์ที่เป็นแหล่งข้อมูลไม่ได้เลยค่ะว่าจะทำอย่างไรให้มันอิสระ หนูลองย้อนไปดูโค้ดนำเข้าข้อมูลฯ ตามที่ท่านแนะนำ แล้วลองเอามาปรับกลับให้เป็นสำหรับ Backup ก็ยังไม่สำเร็จค่ะ
เรียนตามตรงว่าหนูไม่มีความรู้เรื่องประโยคคำสั่งต่างๆที่ประกอบกันเป็นโค้ดหรอกค่ะ เพียงแต่อาศัยดูผลลัพธ์ของแต่ละโค้ดที่พอมีตัวอย่างอยู่ (ส่วนมากก็ได้จากในบอร์ดนี้แหละ) แล้วก็ลองดัดแปลงแก้ไขเอาได้บ้างไม่ได้บ้าง ก็สนุกและได้ประสพการณ์ดีค่ะ แต่พอมาถึงเคสนี้มันเกิดไม่สำเร็จ แต่ก็จะลองเล่นไปเรื่อยๆค่ะ เดี๋ยวอาจารย์ทนรำคราญไม่ไหว ก็จะกรุณาเขียนโค้ดให้หนูเองแหละ อิอิ
ยังไงก็ต้องขอขอบคุณอาจารย์ทุกๆท่านนะคะ ที่ให้ความกรุณาช่วยเหลือหนูมาโดยตลอดค่ะ
14 @R03083
โค้ดเพื่อเลือกไฟล์ http://www.thai-access.com/yeadram_view.php?topic_id=381
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3552s