ใส่รูปในฐานข้อมูล
กระทู้เก่าบอร์ด อ.Yeadram

 33,542   20
URL.หัวข้อ / URL
ใส่รูปในฐานข้อมูล

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

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

1 @R00190
ในฐานข้อมูลอะไรครับ
- MySQL , MS SQL, Access
เว็บนี้ เน้น Access เป็นหลัก ดังนั้นถามจี้ลงไปถึง Access ต่อเลยก็แล้วกัน
- ตัวที่จะเก็บรูปภาพนี้ เป็น ฐานข้อมูลปัจจุบัน หรือฐานข้อมูลตัวอื่นซึ่งแยกไว้     ที่ถามอย่างนี้เพราะว่า
โดยปกติการเก็บไฟล์รูปภาพไว้ในฐานข้อมูลไม่น่าจะเป็นวิธีที่ดี เพราะทำให้ฐานข้อมูลมีขนาดใหญ่อย่างรวดเร็ว (บวม) แม้โดยหลักแล้วจะสามารถเก็บได้ก็ตาม เพียงแค่กำหนดชนิดข้อมูลของฟิลด์ที่จะเก็บให้เป็น OLE OBJECT    และคอนโทรลที่จะนำข้อมุลนี้ไปแสดงบนฟอร์ม ก็ให้เป็นคอนโทรลชนิด BoundOLEobject

วิธีที่เหมาะ ที่คนอื่นๆ ส่วนใหญ่เค้าทำกันคือ
- เก็บรูปภาพไว้ในโฟลเดอร์ที่กำหนด
- ในตารางเก็บข้อมูล มีฟิลด์ที่เห็น text ไว้เก็บ path ของรูปภาพนั้น
- เมื่อจะแสดงข้อมูลบนฟอร์ม หรือรายงาน ให้ใช้คอนโทรล image
- ให้ source ของ image นั้น = ค่าในฟิลด์ (path ของไฟล์รูปภาพ) เช่น


นอกดาต้าเบส ผมมีโฟล์เดอร์เก็บรูปภาพวางไว้ข้าง mdb ตัวนี้เสมอ ไปไหนมาไหนด้วยกัน ชื่อโฟล์เดอร์ว่า GloveProcessImages ผมจะเก็บรูปภาพของสินค้าไว้ใน นั้น
ผมมีฟิลด์ที่เก็บ pathของไฟล์ในตาราง ชื่อว่า picture ชนิดข้อมูลเป็น text
ที่ฟอร์ม ผมจะมีคอนโทรลที่เกี่ยวข้องสองตัว
- textbox ผู??ไว้กับฟิลด์ picture ชื่อ textbox ตัวนี้ คือ PicturePath
- Image ไม่ผูกกับฟิลด์ใดๆ ผมตั้งชื่อคอนโทรลตัวนี้ชื่อ Image1
ผมก็จะเขียนโค้ดประมาณนี้ ครับ

Private Sub Form_Current()
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
ShowPic
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
End Sub

Private Sub ShowPic()
        If Me.PicturePath <> "" Then
            Me.Image1.Picture = CurrentProject.path & "\GloveProcessImages\" & Me.PicturePath
        Else
            Me.Image1.Picture = ""
        End If
End Sub
2 @R00192
ขอบคุณ คุณ yeadram มากครับที่กรุณาผมบ่อยมากครับ
ฐานเป็น Access ครับ
ผมทราบว่าวิธีนี้ไม่ดีครับเลยไม่เคยทำ
แต่งานนี้ทำฐานเพื่อนในห้องแค่ 28 คนใส่รูปที่มีขนาดเล็กมาก
และไม่อยากให้มีไฟล์หลายไฟล์ เผื่อคนไม่เข้าใจเรื่องการ Link
จะทำให้มันยุ่งยากครับ ผมเริ่มจากสร้างฟิลด์ ที่เป็น OLEOPJECT แล้วครับ
และก็เลือกไปยังรูปที่ต้องการแล้วครับ แต่พอสร้าง Report โดยเลือกจากตาราง
ที่เก็บข้อมูลนี้ พอแสงในมุมมองรายงาน มันขึ้น เป็นตัวอักษรชื่อไฟล์นะครับ
แต่พอมาอ่านที่คุณ yeadram ชี้แนะก็เข้าใจว่าผมน่าจะผิดขั้นตอนตรงที่ไม่ได้ใช้คอนโทรลชนิด BoundOLEobject   ผมไปใช้จากโปรแกรมกำหนดให้
แต่เดี๋ยวผมลองดูถ้าใช้ได้จะกลับมาขอบคุณอีกที่ครับ ^J^

3 @R00193
เหมือนเดิมครับคือขึ้นเป็นชื่อไฟล์ครับ
ขอใครชี้แนะหน่อยครับ น่าจะไม่ยาก แต่คงทำไม่ถูกขั้นตอน
4 @R00195
ผมมีตัวอย่างไม่ทราบว่าใช้ได้หรือไม่ ไป download ที่นี่ครับ
http://www.up2box.com/download.php?file=070912c4e054d5a7ef11ec6af32a5c32135bff
5 @R00196
ขอบคุณ Arsitkpnplus ไม่ใช่แบบนี้ครับ แบบนี้ทำได้
อยากให้อยู่ในฐานเลยอะครับ นำไฟล์ .mdb ไปไฟล์เดียวเปิดได้เลย
6 @R00197
การตั้งค่าชนิดข้อมูล



การใส่รูปภาพเข้าตาราง
- คลิ๊กขวาที่ฟิลด์นั้น เลือกคำสั่ง แทรกวัตถุ



เมื่อมี dialog ขั้นมา คลิ๊กตามลำดับ
- เลือกจากไฟล์
- เรียกดู
- ทำการเลือกไฟล์ (ที่ผมเลือกเป็นตัวอย่างคือ 4.jpg)



- เมื่อทำการเลือกเสร็จแล้วกลับมาดูผลที่หน้าตาราง จะเห็นว่า
มันไม่ได้มีตัวหนังสือที่บอกว่าเป็น 4.jpg เลยแต่ไม่ต้องตกใจ นี่คือวิธีที่ถูกแล้ว



เวลาออกแบบรายงาน ดูตามจุดที่วงนะครับ
- ใช้คอนโทรล เฟรมวัตถุที่ผูก (BoundOLEobject)
- ขนาดของคอนโทรล กว้างใหญ่ตามใจชอบ
- โหมดขนาดเลือกได้ตามใจชอบ สำหรับผม ไม่ stretch ก็ zoom ครับ
- ชื่อคอนโทรล ตั้งใหม่หรือไม่ ตามใจชอบ
- แหล่งข้อมูล ขอให้เป็นชื่อฟิลด์ที่เป็นชนิด OLE OBJECT ก็แล้วกัน (ในที่นี้ ฟิลด์นี้ชื่อ gt)



* * อย่าลืมทำการ compact database * *
ผมทำอย่างนี้แหละครับ ได้ตามที่ต้องการเลย
ไม่ทราบว่าคุณ Un_Kop ทำอย่างนี้หรือเปล่า หรือว่าไม่ตรงกันตรงไหนบ้างครับ
7 @R00198
ไม่ทราบลองทำ BLOB ใน Menu แรกหรือยังครับ มัน include รูปไว้ใน Database เลย
8 @R00201
คุณ yeadram ครับผมทำเหมือนทุกขั้นตอนเลยครับ
ต่างตรงที่วงกลมที่ 7 ตรงตารางครับผมไม่มีเมนู Microsoft foto E..... ให้เลือกครับ
ผมใช้ Access 2003 ครับเลยไม่มีหรือว่าอะไรไม่ทราบ
นอกนั้นเหมือนหมด และขั้นตอนสุดท้ายคือผม เปิดรายงานในมุมมองรายงาน
มันขึ้น 4.jpg (สมมุติตามตัวอย่าง) ผมจะโพสรูปให้ดู พอดีทำไม่เป็นขอโทษทีครับ


9 @R00202
1 Microsoft photo editor เป็น โปรแกรมเสริม ที่ทางไมโครซอฟท์แถมฟรี มาพร้อมกับ ชุด office แทบทุกเวอร์ชั่น ตอนติดตั้ง ต้องเลือกโหมดการติดตั้งด้วยการเลือกออปชั่นด้วยตัวเอง
มันจะอยู่ในกลุ่มประมาณ office tools ลองหาดูครับ ณ ตอนนี้ ถ้าคุณ Un_Kop มีแผ่น ออฟฟิศ แล้วอยากจะเพิ่มตรงนี้ ก็เข้าไปเพิ่มได้ครับ (น่าจะเป็นแล้วล่ะ)

2 OLE OBJECT เป็นเรื่องที่ผมไม่กระจ่างเอาซะเลย แต่ผมก็ลองผิดลองถูกมาจนได้ ถ้าให้ทำก็ลุยๆ ไปครับ แต่ถ้าให้อธิบายจริงๆ ว่ามันเป็นมายังไง ทำงานยังไง สัมพันธ์อะไร มีข้อจำกัดอะไรบ้าง คงไม่ไหวครับ   ถ้าให้เดาปัญหาของคุณ Un_Kop ก็คือ สิ่งที่คุณเก็บใน ตาราง ขณะนี้ access ไม่ถือว่าเป็น OLE หรืออาจเป็น แต่ไม่สามารถหาไลบรารี่ มาถอดรหัส OLE ตัวนี้ได้

3 จำเป็นหรือไม่ ต้องเป็น object ที่อ่านด้วย Microsoft Photo editor ใช้ object อย่างอื่น เช่น pdf หรือ bitmap ที่สามารถอ่านออกด้วย Microsoft photo and fax viewer หรือ ms paint ทดแทนได้หรือเปล่า อันนี้ผมก็ไม่ค่อยกระจ่าง น่าจะทดสอบข้อสมมติฐานนี้โดยการไม่ แทรก jpg แต่ลอง แทรก pdf แล้วดูที่รายงาน ว่า มันสามารถแสดง pdf ได้หรือไม่

4 การอัพไฟล์เข้าเว็บบอร์ดแห่งนี้ คงต้องรอสักระยะ ?อดียังไม่ได้เขียนสคริปต์เพิ่มเติมครับ ที่ผมอัพได้เพราะผมใช้ผ่าน โปรแกรมอัพเว็บของผม แล้วลิงค์เอาครับ ตอนนี้คงต้องใช้วิธีอื่นๆ ไปก่อนเช่น อัพไว้ที่อื่น แล้วใช้ลิงค์มาครับ เวลาเขียนในบอร์ดก็แทรก แท็ก img เอาครับ ตามเมนูมีครับ

สุดท้ายคือ ผมไปต่อไม่ได้แล้วครับ อิอิ คงต้องให้ผู้รู้ท่านอื่นๆ ช่วยต่อแล้วครับ
10 @R00208
ขอบคุณในน้ำใจของคุณ yeadram ครับ
ที่ตอบช่วยผมได้มากครับเพราะเป็นการยืนยันการลองผิดลองถูกของผมเหมือนกัน
มันคงติดอยู่นิดหน่อยแต่ไม่รู้ตรงไหนผมจะลองไปเรื่อยๆ ครับ
ขอบคุณมากครับ ^J^
11 @R01232
สวัสดีครับ ตามที่คุณ yeadramอธิบายมานะถูกต้องแล้วครับ แต่ผมขอเพิ่มเติมตรงที่ ถ้าจะให้ภาพขึ้นมาดังภาพต้องแปลงไฟล์ให้เป็นนามสกุล bmp ก่อนครับ ขึ้นมาแน่นอน (ผมทำใน2003)

Krootep@hotmail.com
12 @R04070
คุณ yeadram ครับ ผมลองทำตามคำสั่งที่ อ.ให้มา

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

นอกดาต้าเบส ผมมีโฟล์เดอร์เก็บรูปภาพวางไว้ข้าง mdb ตัวนี้เสมอ ไปไหนมาไหนด้วยกัน ชื่อโฟล์เดอร์ว่า GloveProcessImages ผมจะเก็บรูปภาพของสินค้าไว้ใน นั้น
ผมมีฟิลด์ที่เก็บ pathของไฟล์ในตาราง ชื่อว่า picture ชนิดข้อมูลเป็น text
ที่ฟอร์ม ผมจะมีคอนโทรลที่เกี่ยวข้องสองตัว
- textbox ผูกไว้กับฟิลด์ picture ชื่อ textbox ตัวนี้ คือ PicturePath
- Image ไม่ผูกกับฟิลด์ใดๆ ผมตั้งชื่อคอนโทรลตัวนี้ชื่อ Image1
ผมก็จะเขียนโค้ดประมาณนี้ ครับ

Private Sub Form_Current()
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
ShowPic
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
End Sub

Private Sub ShowPic()
        If Me.PicturePath <> "" Then
            Me.Image1.Picture = CurrentProject.path & "\GloveProcessImages\" & Me.PicturePath
        Else
            Me.Image1.Picture = ""
        End If
End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ลองทำใน access2003 แล้วไม่มีปัญหาภาพขึ้นมาตามปกติ
แต่พอทำใน access97 วิธีการเหมือนกับที่ทำใน 2003 ทุกอย่าง
โค้ดก็ copy กันมา แต่ว่าใน access97 มันขึ้น

Compile error Variable not defined
แล้วก็ขึ้นแถบดำที่ CODE ตรงข้อความ CurrentProject

ผมเดาเอาว่าเิกิดจาก access97 ไม่ทราบคำสั่งนี้
อ. พอจะมีวิธีแก้ได้ไหมครับ
หรือรบกวนผู้รู้ท่านอื่น ช่วยแนะนำด้วยครับ
13 @R04071
ลองใช้แบบ DAO ดูนะครับ (มีใน acc97,2000, 2003,2007 สำหรับ 2002 ถ้าต้องการให้มี ต้อง add เพิ่มเอาเอง)

dim db as database
set db=currentdb

เมื่อจะนำไปใช้หา path ก็ลอง
db.path ครับ
ไม่รู้ใช้ได้หรือเปล่า ผมไม่เคยใช้ access97 ครับ
14 @R04076
ขอบคุณที่กรุณาครับ อ.

เท่าที่ผมลอง ยังไม่ได้ครับ
มันขึ้นแถบดำที่ db ครับ

ตอนนี้เลยว่าจะ convert ฐานข้อมูลไปเป็น 2003 ครับ
คิดว่าคงต้องปรับเปลี่ยนอะไรนิดหน่อย
แต่คาดว่ามันคงจะดีขึ้น แล้วก็จะได้
แก้ปัญหาเรื่องแสดงรูปด้วย

ขอบคุณอาจารย์มากครับ

15 @R04112
จากที่ผม เอาโค้ด ของอาจารย์ไปใช้
ใน เรคคอร์ทไหนที่มีชื่อรูป อยู่ใน PicturePath แล้วก็มีรูปอยู่ใน โฟลเดอร์มันก็แสดงปกติ
เรคคอร์ไหนที่ไม่มีชื่อรูปอยู่ใน PicturePath รูปมันก็ไม่แสดง

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

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

นี่เป็นโค้ดของ อาจารย์ครับ

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Private Sub Form_Current()
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
ShowPic
' ----- คำสั่งอื่นๆ ถ้ามี
' ----- คำสั่งอื่นๆ ถ้ามี
End Sub

Private Sub ShowPic()
        If Me.PicturePath <> "" Then
            Me.Image1.Picture = CurrentProject.path & "\GloveProcessImages\" & Me.PicturePath
        Else
            Me.Image1.Picture = ""
        End If
End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ต้องเพิ่มเติม ตรงไหน รบกวนด้วยครับ

16 @R04118
จะต้องตรวจสอบไฟล์รูปภาพก่อนว่า มีอยู่หรือไม่

Private Sub ShowPic()
       'ตรวจสอบว่า path มีจริง
        If Me.PicturePath <> "" Then
            'ตรวจสอบรูปภาพว่ามีไฟล์จริง
             If Dir(CurrentProject.path & "\GloveProcessImages\" & Me.PicturePath)<>"" then
            Me.Image1.Picture = CurrentProject.path
& "\GloveProcessImages\" & Me.PicturePath
             else 'ไม่มีไฟล์รูปภาพ
                    Me.Image1.Picture = ""
             End if
        Else
            Me.Image1.Picture = ""
        End If
End Sub
17 @R04119
แก้ได้แล้วครับ

ขอบคุณ ทุก ๆ คน ที่กรุณา สละเวลามาตอบให้ครับ

ขอบคุณมากครับ



18 @R08536
ขอบคุณครับ
19 @R08540
ถ้าเป็น MS Access 97 จะไม่มี CurrentProject.Path ครับ

ต้องเขียนฟังก์ชันขึ้นมาใช้งาน

ลองค้นหาด้วยคำว่า ap_AppDir ดู
20 @R08607
Code ตามนี้เลยครับ เพราะผมใช้ access 2002-2003 อยู่ครับ
โดยให้ Picture เป็น Image ครับ

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
On Error Resume Next
    If IsNull(Me.txtPicture) Then
        Me.Form_Image.Picture = "(none)"
    Else
        Me.Form_Image.Picture = Me.txtPicture
    End If
End Sub
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3126s