ช่วยแก้โค้ดแสดงรูปเมื่อไม่พบรูปแล้ว Error ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,694   4
URL.หัวข้อ / URL
ช่วยแก้โค้ดแสดงรูปเมื่อไม่พบรูปแล้ว Error ครับ

รบกวนท่านผู้รู้ช่วยแก้ไขโค้ดแสดงรูปให้หน่อย ลอกเขามาอีกทีครับ เฉพาะบางส่วน

Private Sub Photo_AfterUpdate()
    ' After selecting an image for the employee, display it.
    On Error Resume Next
        showErrorMessage
        showImageFrame
        If (IsRelative(Me!ImagePath) = True) Then
            Me![ImageFrame].Picture = path & Me![ImagePath]
        Else
            Me![ImageFrame].Picture = Me![ImagePath]
        End If
End Sub
=======================
Private Sub Form_AfterUpdate()
    ' Requery the ReportsTo combo box after a record has been changed.
    ' Then, either show the errormsg label if no file name exists for
    ' the employee record or display the image if there is a file name that
    ' exists.
    Rem Me!ReportsTo.Requery
    On Error Resume Next
        showErrorMessage
        showImageFrame
        If (IsRelative(Me!ImagePath) = True) Then
            Me![ImageFrame].Picture = path & Me![ImagePath]
        Else
            Me![ImageFrame].Picture = Me![ImagePath]
        End If
End Sub
=======================
Private Sub ImagePath_AfterUpdate()
    ' After selecting an image for the employee, display it.
    On Error Resume Next
        showErrorMessage
        showImageFrame
        If (IsRelative(Me!ImagePath) = True) Then
            Me![ImageFrame].Picture = path & Me![ImagePath]
        Else
            Me![ImageFrame].Picture = Me![ImagePath]
        End If
End Sub
======================
Private Sub Form_Current()
    ' Display the picture for the current employee record if the image
    ' exists. If the file name no longer exists or the file name was blank
    ' for the current employee, set the errormsg label caption to the
    ' appropriate message.
    Dim res As Boolean
    Dim fName As String
    
    path = CurrentProject.path
    On Error Resume Next
        errormsg.Visible = False
        If Not IsNull(Me!Photo) Then
            res = IsRelative(Me!Photo)
            fName = Me![ImagePath]
            If (res = True) Then
               fName = path & "\" & fName
            End If
            
            Me![ImageFrame].Picture = fName
            showImageFrame
            Me.PaintPalette = Me![ImageFrame].ObjectPalette
            If (Me![ImageFrame].Picture <> fName) Then
               hideImageFrame
               errormsg.Caption = "Selecphoto"
               errormsg.Visible = True
            End If
        Else
            hideImageFrame
            errormsg.Caption = "Photo View"
            errormsg.Visible = True
        End If
End Sub

ปัญหาคือว่าเวลาย้ายไปใช้เครื่องอื่น แล้วมันยังถามหา Path จากเครื่องเดิมอยู่ ทุกครั้งที่เริ่มเปิดฟอร์มครับ แต่ก็ยังเปิดใช้งานต่อไปได้
ไม่ทราบว่าจะแก้ไขอย่างไรไม่ให้มันจำ Path จากเครื่องเดิมครับท่าน

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

1 @R12183
อืม... หลายอย่างครับ ที่คุณต้องตรวจสอบ
1. ไฟล์ภาพคุณจัดเก็บอยู่ในโฟลเดอร์เดียวกับไฟล์ Access หรือไม่
2. ฟิลด์ ImagePath ของคุณจัดเก็บด้วยรูปแบบไหน เช่น C:\Image\1.jpg หรือ \Image\1.jpg หรือ 1.jpg เลย

ในกรณีคุณเก็บไฟล์ภาพอยู่ภายใต้โฟลเดอร์เดียวกันกับไฟล์ Access คุณถึงสามารถยืดหยุ่นพาธได้ครับ
ให้คุณทำความเข้าใจกับคำสั่ง CurrentProject.path ในฟังก์ชั่นของคุณ การใช้คำสั่งนี้มันจะส่งค่ากับมาเป็น Text พาธตามที่อยู่จริงของไฟล์ Access ที่คุณใช้อยู่ เช่น ไฟล์ Access คุณอยู่ที่ C:\Data\1.mdb มันจะส่งค่ากลับมาเป็น C:\Data ดังนั้น หากคุณเก็บค่าในฟิลด์ ImagePath สมมุติเป็น \Image\1.jpg เมื่อคุณใช้คำสั่ง CurrentProject.path & ImagePath ผลลัพท์ก็จะได้ C:\Data\Image\1.jpg ซึ่งจะถูกต้อง แต่หากคุณเก็บข้อความพาธในฟิลด์ ImagePath เป็น Image\1.jpg คุณก็ต้องเพิ่ม "\" เข้าไปด้วย คือ CurrentProject.path & "\" & ImagePath ถึงจะได้ C:\Data\Image\1.jpg
ในโค๊ดของคุณได้ประกาศตัวแปรคำว่า path เท่ากับคำสั่ง CurrentProject.path ฉนั้น คำว่า path ในโค๊ดคุณให้คุณมองว่ามันมีค่าเป็น พาธที่อยู่ไฟล์ Access ของคุณอยู่ จากนั้นคุณก็ต้องเก็บชื่อพาธไฟล์ภาพที่เหลือต่อจากนั้นให้ถูกต้อง
โทษนะครับผมอยากอธิบายให้เข้าใจมากกว่า แก้โค๊ดให้ และดูแล้วโค๊ดคุณก็ไม่น่าจะผิดอะไร มันขึ้นอยู่กับการจัดเก็บค่าพาธของไฟล์ภาพคุณด้วยว่าสอดคล้องกันหรือเปล่า ไม่รู้ว่าเข้าใจหรือเปล่า ศึกษาดูครับไม่ยาก
2 @R12186
ขอบคุณมากเลยคุณ TTT ผมได้ตรวจสอบตามคำแนะนำ น่าจะพบสาเหตุแล้วคือ เมื่อนำไปใช้กับเครื่องอื่นแล้วไม่ได้เอารูปไปด้วย ตอนนี้ลองเอารูปไปวางในตำแหน่ง path ให้มันสอดคล้องกับเครื่องแรก ปรากฏว่าใช้ได้ไม่แสดง Error แล้วครับ

ขอถามเพิ่มเติมอีกหน่อยว่า กรณีนี้ เราจะแก้ไขโค้ดดังกล่าว เมื่อไม่เจอรูปตาม Path เดิม จะให้มันล้างค่า Path เดิมไปเลยได้หรือไม่ หากได้จะเกิดผลเสียอะไรหรือเปล่าครับ
3 @R12190
ได้ครับ ถ้าบนฟอร์มคุณอาจใช้คำสั่ง Dir() ตรวจสอบไฟล์ว่ามีอยู่จริงหรือไม่ เช่น Dir("C:\Data\Image\1.jpg", vbNormal)
ตัวอย่าง
If Dir(CurrentProjct.path & me.ImagePath, vbNormal) = "" Then
    Msgbox "ไม่มีไฟล์ภาพชื่อนี้อยู่จริง"
    'me.imagePath = "" 'หรือคำสั่งอื่นๆที่ต้องการ
Else
    Msgbox "มีไฟล์ภาพชื่อนี้อยู่จริง"
End If

แต่ก็เท่ากับว่าคุณต้องใส่ค่าในฟิลด์ ImagePath ใหม่นะครับ
4 @R12191
ขอบคุณที่กรุณาให้แนวทางนะครับ
จะรีบนำไปประยุกต์ใช้ให้ได้ผลตามที่ต้องการครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2700s