msgbox แจ้งว่า กำลังทำการสำรองข้อมูล



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

14 พ.ค. 62 , 11:00:28
อ่าน 456 ครั้ง

diehard4

ขณะสำรองข้อมูลอยากให้มี msgbox แจ้งว่าตอนนี้กำลังทำการสำรองข้อมูลอยู่
หลังจากสำรองข้อมูเสร็จ ก็อยากให้ขึ้นข้อความแจ้งว่า สำรองข้อมูลเสร็จแล้ว ตอนนี้ผมมีแจ้งแค่ตอนทำเสร็จแล้วเท่านั้นครับ
ไม่ทราบว่าต้องทำเช่นไรครับผม  :question:

    Dim oFSO As Object
    Dim strDestination As String
    strDestination = "\\server\"
    DBEngine.Idle
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    oFSO.CopyFile CurrentProject.Path & "Data1.accdb", strDestination   
    Set oFSO = Nothing

    MsgBox ("สำรองข้อมูลเสร็จแล้ว"), vbOKOnly + vbInformation, "Process Completed"

 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

14 พ.ค. 62 , 23:27:37
ตอบกลับ #1

สันติสุข

: msgbox แจ้งว่า กำลังทำการสำรองข้อมูล
« ตอบกลับ #1 เมื่อ: 14 พ.ค. 62 , 23:27:37 »
เนื่องจาก Message Box ไม่อนุญาตให้โค้ดบรรทัดต่อไปทำงาน จนกว่าจะปิดกล่องข้อความที่แสดงไป ดังนั้นเราจึงต้องไปใช้อย่างอื่นทำหน้าที่แสดงข้อความแทน เช่น สร้างฟอร์มเพื่อทำหน้าที่เป็น Message Box, แสดงข้อความบน Textbox หรือ Command Button ภายในฟอร์มของตัวของเขาเองครับ ส่วนตัวผมเอง ผมหาพื้นที่สักส่วนนึงบนฟอร์มแล้วสร้าง Textbox เพื่อแสดงข้อความครับ ง่ายดี พอทำงานเสร็จ จะ Invisible มันไปด้วยก็ได้ หรือจะเคลียร์ข้อความใน Textbox ทิ้งก็ได้ ตย.เช่น

    Dim oFSO As Object
    Dim strDestination As String
    strDestination = "\\server\"
    DBEngine.Idle
    Set oFSO = CreateObject("Scripting.FileSystemObject")
   
    Me.[ชื่อ Textbox].Visible = True
    Me.[ชื่อ Textbox] = "ข้อความ"

    oFSO.CopyFile CurrentProject.Path & "Data1.accdb", strDestination   
    Set oFSO = Nothing
   
    Me.[ชื่อ Textbox].Visible = False
    Me.[ชื่อ Textbox] = ""

    MsgBox ("สำรองข้อมูลเสร็จแล้ว"), vbOKOnly + vbInformation, "Process Completed"

แต่ถ้าต้องการสร้างเป็นฟอร์มแทน Message Box ก็ไปสร้างฟอร์มโดยกำหนด Property ของฟอร์มเป็นค่าเหล่านี้
Pop up เป็น Yes
Scroll bars เป็น Neither
Record Selector เป็น No
Navigation Button เป็น No
Auto Resize เป็น Yes
Auto Center เป็น Yes
Border Style เป็น Thin หรือจะเป็น None ก็ได้ ลองดูเอาแบบที่ชอบครับ
Control เป็น None
แล้วก็สร้าง Textbox เพื่อไว้แสดงข้อความ พอจะใช้งาน ก็เพียงเปิดฟอร์มนี้ ใส่ข้อความลง Textbox แล้วปิดเมื่อทำงานเสร็จ เท่านี้เองครับ

ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี, diehard4, apirak

15 พ.ค. 62 , 21:15:29
ตอบกลับ #2

มาลี

: msgbox แจ้งว่า กำลังทำการสำรองข้อมูล
« ตอบกลับ #2 เมื่อ: 15 พ.ค. 62 , 21:15:29 »
ขออนุญาตใช้กระทู้นี้ต่อคำถามเพิ่มเติมนะคะ
 หนูมีโปรเจ็คชื่อ Sample หนูลองนำคำสั่งในนี้ไปประยุกต์ใช้เป็นดังนี้
โค๊ด: [Select]
oFSO.CopyFile CurrentProject.Path & "\" & CurrentProject.Name, "D:\" & "Backup " & CurrentProject.Name
ซึ่งมันก็ใช้ได้ดีเลยทีเดียว โดยจะได้ไฟล์สำรองเป็น BackupSample ตามที่ต้องการ
ประเด็นปัญหาก็คือ หากเราไปเปิดตัวไฟล์สำรอง BackupSample แล้วสั่งสำรองข้อมูล
มันก็จะได้ไฟล์สำรองตัวใหม่เป็น BackupBackupSample

หนูจึงอยากได้ว่า หากมีการเปิดไฟล์โปรเจ็คที่ มีชื่อขึ้นต้นว่า Backup
ก็ให้มีข้อความบอกผู้ใช้ว่า"ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่" ประมาณนี้ค่ะ
ไม่ทราบว่าต้องทำอย่างไรคะ

 

15 พ.ค. 62 , 23:11:34
ตอบกลับ #3

ปิ่นณรงค์

: msgbox แจ้งว่า กำลังทำการสำรองข้อมูล
« ตอบกลับ #3 เมื่อ: 15 พ.ค. 62 , 23:11:34 »
ขออนุญาตใช้กระทู้นี้ต่อคำถามเพิ่มเติมนะคะ
 หนูมีโปรเจ็คชื่อ Sample หนูลองนำคำสั่งในนี้ไปประยุกต์ใช้เป็นดังนี้
โค๊ด: [Select]
oFSO.CopyFile CurrentProject.Path & "\" & CurrentProject.Name, "D:\" & "Backup " & CurrentProject.Name
ซึ่งมันก็ใช้ได้ดีเลยทีเดียว โดยจะได้ไฟล์สำรองเป็น BackupSample ตามที่ต้องการ
ประเด็นปัญหาก็คือ หากเราไปเปิดตัวไฟล์สำรอง BackupSample แล้วสั่งสำรองข้อมูล
มันก็จะได้ไฟล์สำรองตัวใหม่เป็น BackupBackupSample

หนูจึงอยากได้ว่า หากมีการเปิดไฟล์โปรเจ็คที่ มีชื่อขึ้นต้นว่า Backup
ก็ให้มีข้อความบอกผู้ใช้ว่า"ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่" ประมาณนี้ค่ะ
ไม่ทราบว่าต้องทำอย่างไรคะ

สร้าง Function มาเช็คดูก็ได้คับ ว่าไฟล์เปิดใช้งานจริงหรือไม่

โค๊ด: [Select]
Function checkFileOpen(FilePath As String)
    Dim iFile As Long
    Dim OnErr As Long
    On Error Resume Next
    iFile = FreeFile()
    Open FilePath For Input Lock Read As #iFile

    Close iFile
    OnErr = Err
    On Error GoTo 0
     
    Select Case OnErr
    Case 0:    checkFileOpen = False
    Case 70:   checkFileOpen = True
    End Select
     
End Function

Private Sub Command0_Click()
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")

If checkFileOpen("D:\" & "Backup " & CurrentProject.Name) = False Then
   oFSO.CopyFile CurrentProject.Path & "\" & CurrentProject.Name, "D:\" & "Backup " & CurrentProject.Name
   Set oFSO = Nothing
   
Else
    MsgBox "ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่", vbInformation, "แจ้งเตือน"
End If
End Sub
« แก้ไขครั้งสุดท้าย: 15 พ.ค. 62 , 23:32:09 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี, diehard4, apirak

16 พ.ค. 62 , 05:58:13
ตอบกลับ #4

มาลี

: msgbox แจ้งว่า กำลังทำการสำรองข้อมูล
« ตอบกลับ #4 เมื่อ: 16 พ.ค. 62 , 05:58:13 »
ยังไม่สำเร็จเลยค่ะอาจารย์

มันยังคงปล่อยผ่านโดยไม่มีการแจ้งเตือน ไม่ว่าไฟล์นั้นจะมีชื่อข้นต้นว่า Backup หรือไม่ก็ตาม

หนูอาจสื่อสารความต้องการยังไม่เข้าใจชัดเจนเท่าที่ควรก็ได้ คือความต้องการของหนูจะเป็นอย่างนี้ค่ะอาจารย์

หนูต้องการอยากจะตรวจสอบชื่อไฟล์ว่า หากไฟล์ที่เปิดนั้น เพียงมีชื่อ ขึ้นต้นด้วยคำว่า"Backup" ก็ให้มีการแจ้งเตือนดังกล่าวทันที
โดยไม่ว่าไฟล์ดังกล่าวจะถูกนำไปเปิด ณ จุดใดก็ตาม หากไฟล์ยังมีชื่อที่ขึ้นต้นว่า "Bacup" ก็ถือว่าเข้าเงื่อนไขดังกล่าวทั้งหมดค่ะ

ขอรบกวนท่านอีกนิดนะคะ
« แก้ไขครั้งสุดท้าย: 16 พ.ค. 62 , 07:29:37 โดย มาลี »

 

16 พ.ค. 62 , 11:08:55
ตอบกลับ #5

ปิ่นณรงค์

: msgbox แจ้งว่า กำลังทำการสำรองข้อมูล
« ตอบกลับ #5 เมื่อ: 16 พ.ค. 62 , 11:08:55 »
อ้างถึง
หนูต้องการอยากจะตรวจสอบชื่อไฟล์ว่า หากไฟล์ที่เปิดนั้น เพียงมีชื่อ ขึ้นต้นด้วยคำว่า"Backup" ก็ให้มีการแจ้งเตือนดังกล่าวทันที

ถ้าจะสร้างการตรวจสอบเมื่อเปิดไฟล์ขึ้นมางั้นเราจะเพิ่มโค้ดตรวจสอบไว้ที่ AutoExec นะครับ
โดย Macro และ Module นี้นำไปไว้ที่ โปรแกรมหลักของเราเลย เวลา Copy ไฟล์ Macro และ Module นี้จะติดมาด้วย

ขั้นตอนที่ 1 สร้าง Module ใส่
โค๊ด: [Select]
Public Function AutoExec_AutoExec()
On Error GoTo AutoExec_AutoExec_Err
   Dim strFileName As String
   Dim DFileName As String
   
   strFileName = CurrentProject.Path & "\" & CurrentProject.Name
    DFileName = Dir(strFileName)
   
   If Left(DFileName, 6) = "Backup" Then
   MsgBox "ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่", vbInformation, "แจ้งเตือน"
    DoCmd.Quit
   End If
AutoExec_AutoExec_Exit:
    Exit Function
   
AutoExec_AutoExec_Err:
    MsgBox Error$
    Resume AutoExec_AutoExec_Exit
   
End Function

ขั้นตอนที่ 2 สร้างมาโครขึ้นมา 1 อันใส่โค้ดนี้ไปตั้งชื่อว่า AutoExec


เท่านี้เวลาเปิดไฟล์ไหนก็แล้วแต่ที่ Copy มา ถ้าไฟล์ ชื่อขึ้นต้นด้วย BackUp ก็จะแสดง Msgbox แจ้งเตือนทันทีคับ

ผมมีตัวอย่างไฟล์ ลองกด Botton Copy แล้วไปลองเปิดไฟล์ Backup ที่ Drive D ดูครับ
« แก้ไขครั้งสุดท้าย: 16 พ.ค. 62 , 11:17:07 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: aek, apirak

17 พ.ค. 62 , 05:33:00
ตอบกลับ #6

มาลี

: msgbox แจ้งว่า กำลังทำการสำรองข้อมูล
« ตอบกลับ #6 เมื่อ: 17 พ.ค. 62 , 05:33:00 »
เย้...ได้แล้ว ทำได้สำเร็จแล้วค่ะ

ขอขอบคุณอาจารย์มากๆนะคะ
และขอขอบคุณเจ้าของกระทู้นี้ด้วยที่ช่วยให้หนูได้ใช้ประโยชน์จากประเด็นคำถามนี้

ขอบคุณค่ะ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย