การนำไฟล์รูปภาพมาใส่ในฟอร์ม โดยการลิงห์ จะทำยังไงครับ

UGETPROJECT.COM Forums ถามตอบปัญหา MS Access การนำไฟล์รูปภาพมาใส่ในฟอร์ม โดยการลิงห์ จะทำยังไงครับ

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #518
    Pirin Phon
    Participant

    ผมต้องการการนำไฟล์รูปภาพ ที่อยู่ใน โฟล์เดอร์ มาใส่ในฟอร์ม โดยการลิงห์ จะทำยังไงครับ ไม่ใช้วิธีการแนบรูปภาพครับ เพราะกลัวฐานข้อมูลใหญ่

    #519
    adminadmin
    Keymaster

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

    1 ตารางที่เราจะเก็บไฟล์นั้น ให้เก็บแต่ path โดย ประเภทของข้อมูลที่เก็บใช้เป็น text ธรรมดาครับ

    2 สร้างฟอร์มเพิ่มไฟล์ โดย เอาฟิล์ด ที่เราจะเก็บ path ออกมา เป็น textbox แล้วเลือก perperty hyper text เป็น yes ด้วยครับ

    3 ที่ Control source เขียนสูตร =IIf(IsNull([filepath]),"","ดูไฟล์") อธิบายคือ ถ้าช่องที่เราทำเป็นยังไม่มีการเก็บ path เราจะให้เป็นช่องว่างไว้ แต่ถ้ามีการเก็บ path ไว้แล้ว ให้มีลิงค์เปิดดูไฟล์ได้

    4 ที่ event on click ของ textbox ให้ใส่สูตรเพื่อ เช็คว่า มีการใส่ path หรือยัง ถ้าใส่แล้ว ให้เปิดไฟล์ขึ้นมา แต่ถ้ายังไม่ได้ใส่ ให้เลือกไฟล์ เพื่อก๊อปปี้ไฟล์มาไว้ใน folder ที่เรากำหนด แล้วก็เก็บ path ไว้เรียกใช้ภายหลัง

    อันนี้คือเรียกใช้ sub copyToFolder(ชื่อtextbox,ชื่อโฟลเดอร์ที่จะย้ายไฟล์มาเก็บ,ชื่อฟิล์ที่จะเก็บ path ในตาราง)

    Private Sub filepaath_Click()
       Call copyToFolder(Me.filepath, "images", Me.file_pattern)
    End Sub

    ส่วน Sub copyToFolder อันนี้ต้องไล่โค๊ตแล้วเอาไปประยุกต์ใช้เอาเองนะครับ ^^

    Sub copyToFolder(ByRef o As Object, ByVal ftext As String, ByRef field As Object)
        If (o.Value = "") Then
    
            Dim f    As Object
            Set f = Application.FileDialog(3)
            f.AllowMultiSelect = True
            f.Title = "กรุณาเลือกไฟล์รูป หรือ ไฟล์ PDF เพื่อแนบไปกับสินค้านี้"
            f.Show
    
            
            If (f.SelectedItems.Count > 0) Then
                For Each vrtSelectedItem In f.SelectedItems
                    Dim fs As Object
                    Dim oldPath As String, newPath As String
                    oldPath = vrtSelectedItem 
                    Fname = Filename(vrtSelectedItem)
                    fext = EXTname(Fname)
                    Newname = Me.cus_code & "_" & Me.pro_code & "." & fext
                    newPath = CurrentProject.Path & "\" & ftext & "\" & Newname 
                    Set fs = CreateObject("Scripting.FileSystemObject")
                    Call fs.CopyFile(oldPath, newPath, True)
                    Set fs = Nothing
                    field.Value = Newname
                    o.Requery
                Next
            End If
        Else
            
            thisfile = CurrentProject.Path & "\" & ftext & "\" & field.Value
            If (FileExists(thisfile)) Then
                Application.FollowHyperlink thisfile, , True
            Else
                field.Value = ""
                o.Requery
                MsgBox "ไฟล์ที่เคยแนบอาจโดนลบไปแล้วกรุณาเลือกไฟล์เพื่อแนบอีกครั้ง"
            End If
        End If
    End Sub

    5 ถ้าทำถูกต้องนะครับ เราก็จะได้ฟอร์มที่สามารถคลิกที่ textbox เพื่อเลือกไฟล์รูปมาเก็บไว้ที่ folder ที่เรากำหนด ได้ โดยเราเก็บแค่ path ไว้ในตารางเท่านั้น ส่วนจะเอา path ไปทำอะไรต่อก็แล้วแต่นะครับ ^^

    ที่ผมเคยทำมีอยู่วิธีนี้วิธีเดียวครับยอมรับว่าค่อนข้างยากเหมือนกัน เป็นกำลังใจให้นะครับ ^^

    #520
    Pirin Phon
    Participant

    ยากมากครับ ผมมือใหม่จะทำได้ไหมเน่ี่ย แต่อธิบายได้ละเอียดมากครับ ผมจะลองทำดู ขอบคุณมากๆน๊ะครับ ได้ทำได้แล้วจะแจ้งให้ทราบน๊ะครับ

Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.