Tag: ACCESS

  • แก้ปัญหา Access เตือน Save to SharePoint site

    เดือนก่อน ผม update ฐานข้อมูล Access ที่ใช้กันในแผนก แล้ว share ให้ทีมใช้ และเจอปัญหามีข้อความเตือน ดังภาพด้านบน

    คือมี SAVE CHANGES Save your changes to the server. พร้อมปุ่ม Save to SharePoint Site ให้กด

    ซึ่งก็ไม่มีผลต่อการใช้งานอะไรหรอก แต่มันดูแปลก ๆ สำหรับคนใช้งาน เลยลองค้นหาวิธีแก้ และอยากเขียนแชร์ไว้เตือนความจำตนเอง และเผื่อเป็นประโยชน์กับทุกคน

    สาเหตุก็คือ บางทีเราไป Save ไฟล์ไว้ใน SharePoint หรือบางทีก็ OneDrive นี่ล่ะ และระบบก็เพิ่ม Property หนึ่งให้กับไฟล์เรา ทีนี้ Access ก็เลยคอยเตือน

    อย่างไรก็ตาม ตามคำแนะนำเขาก็ไม่แนะนำให้เราใช้ Access ทั้งใน SharePoint และ OneDrive อยู่แล้วล่ะ แต่กรณีของผมคือ ผม save ทุกอย่างไว้ใน OneDrive เลยเจอปัญหานี้

    วิธีแก้คือ เราต้องเขียน VBA code เพื่อลบ Property นี้ออก โดยใช้คำสั่งนี้

    CurrentDb.Properties.Delete "PublishURL"

    แต่ก็จะไปเจอปัญหาว่า เมื่อเปิด Access มาใช้งานรอบถัดไป จะขึ้น Error 😂 เนื่องจากพอลบไปแล้ว รอบถัดไประบบก็จะเตือนว่า Property ที่สั่งให้ลบนี้ไม่มีนะ

    ซึ่งวิธีแก้ปัญหามี 2 วิธี คือ 1. ลบโค้ดที่ใส่ไปออกซะ กับ 2. คือ เขียนโค้ดเพิ่มให้เช็คว่ามี Property ที่ชื่อ “PublishURL” อยู่ไหม? หากมีให้ลบ ถ้าไม่มีก็แล้วไป จะได้โค้ดประมาณนี้

    Sub deletePublishUrl()
    
        If propertyExists("PublishURL") Then
            CurrentDb.Properties.Delete "PublishURL"
        End If
    	
    End Function
    
    
    Private Function propertyExists(ByVal propName As String) As Boolean
            
        propertyExists = False
        
        Dim prop As Variant
        
        For Each prop In CurrentDb.Properties
            If prop.Name = propName Then
                propertyExists = True
            End If
        Next prop
            
    End Function

    โดยโค้ดประกอบไปด้วย 2 ส่วนคือ Sub-procedure ที่ชื่อ deletePublishUrl เป็นตัวเรียกใช้งานฟังก์ชันที่ชื่อ propertyExists อีกที และต้องใส่อาร์กิวเมนต์เป็นชื่อ Property ที่เราต้องการตรวจสอบเข้าไป ซึ่งในที่นี้คือ “PublishURL”

    หากมี Property นี้ ฟังก์ชันก็จะให้ค่ากลับมาเป็นจริง (TRUE) ซึ่งจะทำให้ขั้นตอนทดสอบค่า IF ของ Sub-procedure ที่ชื่อ deletePublishUrl เป็นจริง แล้วค่อยสั่งให้คำสั่ง CurrentDb.Properties.Delete "PublishURL" ทำงาน

    หากฟังก์ชัน propertyExists ให้ค่ากลับมาเป็นเท็จ (False) คำสั่งส่วนนี้ก็จะถูกข้ามไป

    เพียงเท่านี้ก็เรียบร้อยครับ ตอนนี้ผมยังไม่เจอปัญหามีข้อความเตือนขึ้นมาอีกนะ หวังว่าจะเป็นประโยชน์กับทุกคน

    หากมีปัญหาอะไรยังไง comment ไว้ได้เลยครับ 😁