กระทู้เก่าบอร์ด อ.Yeadram
1,740 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 จากเครื่องเดิมครับท่าน
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
2 @R12186
ขอบคุณมากเลยคุณ TTT ผมได้ตรวจสอบตามคำแนะนำ น่าจะพบสาเหตุแล้วคือ เมื่อนำไปใช้กับเครื่องอื่นแล้วไม่ได้เอารูปไปด้วย ตอนนี้ลองเอารูปไปวางในตำแหน่ง path ให้มันสอดคล้องกับเครื่องแรก ปรากฏว่าใช้ได้ไม่แสดง Error แล้วครับ
ขอถามเพิ่มเติมอีกหน่อยว่า กรณีนี้ เราจะแก้ไขโค้ดดังกล่าว เมื่อไม่เจอรูปตาม Path เดิม จะให้มันล้างค่า Path เดิมไปเลยได้หรือไม่ หากได้จะเกิดผลเสียอะไรหรือเปล่าครับ
ขอถามเพิ่มเติมอีกหน่อยว่า กรณีนี้ เราจะแก้ไขโค้ดดังกล่าว เมื่อไม่เจอรูปตาม 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 ใหม่นะครับ
ตัวอย่าง
If Dir(CurrentProjct.path & me.ImagePath, vbNormal) = "" Then
Msgbox "ไม่มีไฟล์ภาพชื่อนี้อยู่จริง"
'me.imagePath = "" 'หรือคำสั่งอื่นๆที่ต้องการ
Else
Msgbox "มีไฟล์ภาพชื่อนี้อยู่จริง"
End If
แต่ก็เท่ากับว่าคุณต้องใส่ค่าในฟิลด์ ImagePath ใหม่นะครับ
4 @R12191
ขอบคุณที่กรุณาให้แนวทางนะครับ
จะรีบนำไปประยุกต์ใช้ให้ได้ผลตามที่ต้องการครับ
จะรีบนำไปประยุกต์ใช้ให้ได้ผลตามที่ต้องการครับ
Time: 0.4041s
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 ของคุณอยู่ จากนั้นคุณก็ต้องเก็บชื่อพาธไฟล์ภาพที่เหลือต่อจากนั้นให้ถูกต้อง
โทษนะครับผมอยากอธิบายให้เข้าใจมากกว่า แก้โค๊ดให้ และดูแล้วโค๊ดคุณก็ไม่น่าจะผิดอะไร มันขึ้นอยู่กับการจัดเก็บค่าพาธของไฟล์ภาพคุณด้วยว่าสอดคล้องกันหรือเปล่า ไม่รู้ว่าเข้าใจหรือเปล่า ศึกษาดูครับไม่ยาก