สอบถามการจำกัดขนาดของไฟล์แนบครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,892   16
URL.หัวข้อ / URL
สอบถามการจำกัดขนาดของไฟล์แนบครับ

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


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

1 @R24190
น่าจะใช้วิธีใส่เฉพาะชื่อไฟล์รูปเข้าไปในฐานข้อมูลนะครับ แล้วเก็บรูปไว้ที่โฟลเดอร์ต่างหาก ทำแบบนี้ฐานข้อมูลก็จะไม่ใหญ่ครับ
2 @R24191
555 ทำยังไงอะครับ
แต่ถ้าต้องการทำอย่างที่ผมว่า มันต้องจำกัดตรงไหนครับ
3 @R24192
อันนี้เป็น Code ที่ใช้จำกัด Size ของ Attached File นะครับ
(ลอกเขามา ไม่ได้คิดเอง)

Public Function SelectFileWithSizeCheck(lngFileSize) As String
'Requires Office XP (2002) or higher
'Requires references to the Microsoft Office Object Library and
'the Scripting Runtime Library
'Created by Helen Feddema 24-Oct-2009
'Last modified 24-Oct-2009

On Error GoTo ErrorHandler

   Dim fd As Office.FileDialog
   Dim fso As New Scripting.FileSystemObject
   Dim fil As Scripting.File
   Dim varSelectedItem As Variant
   Dim strFileNameAndPath As String
   
   'Create a FileDialog object as a File Picker dialog box.
   Set fd = Application.FileDialog(msoFileDialogFilePicker)
   
   With fd
      'Set AllowMultiSelect to True to allow selection of multiple files
      .AllowMultiSelect = False
      .Title = "Browse for File"
      .ButtonName = "Select"
      .Filters.Clear
      .Filters.Add "Documents", "*.doc; *.txt", 1
      .InitialView = msoFileDialogViewDetails
      If .Show = -1 Then
        'Get selected item in the FileDialogSelectedItems collection
        'Have to use collection even if just one item is selected
        For Each varSelectedItem In .SelectedItems
            strFileNameAndPath = CStr(varSelectedItem)
        Next varSelectedItem
      Else
        Debug.Print "User pressed Cancel"
        strFileNameAndPath = ""
      End If
   End With
   
   Set fil = fso.GetFile(strFileNameAndPath)
   Debug.Print "File size: " & fil.Size
   If fil.Size <= lngFileSize Then
      SelectFileWithSizeCheck = strFileNameAndPath
   Else
      MsgBox "File exceeds the allowed size; can't import"
      SelectFileWithSizeCheck = ""
   End If
   
ErrorHandlerExit:
   Set fd = Nothing
   Exit Function

ErrorHandler:
   MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description
   Resume ErrorHandlerExit

End Function
4 @R24199
ไม่ทราบเอาไปใช้ยังไง 555 งง
5 @R24200
1. กดปุ่ม Alt+F11
2. Copy Code นี้ลงไปวาง (ผมแก้ไขให้เลือกไฟล์รูป jpg กับ png แล้ว)

Public Function SelectFileWithSizeCheck(lngFileSize) As String
'Requires Office XP (2002) or higher
'Requires references to the Microsoft Office Object Library and
'the Scripting Runtime Library
'Created by Helen Feddema 24-Oct-2009
'Last modified 24-Oct-2009

On Error GoTo ErrorHandler

   Dim fd As Office.FileDialog
   Dim fso As New Scripting.FileSystemObject
   Dim fil As Scripting.File
   Dim varSelectedItem As Variant
   Dim strFileNameAndPath As String
    
   'Create a FileDialog object as a File Picker dialog box.
   Set fd = Application.FileDialog(msoFileDialogFilePicker)
    
   With fd
      'Set AllowMultiSelect to True to allow selection of multiple files
      .AllowMultiSelect = False
      .Title = "Browse for File"
      .ButtonName = "Select"
      .Filters.Clear
      .Filters.Add "Documents", "*.jpg; *.png", 1
      .InitialView = msoFileDialogViewDetails
      If .Show = -1 Then
        'Get selected item in the FileDialogSelectedItems collection
        'Have to use collection even if just one item is selected
        For Each varSelectedItem In .SelectedItems
            strFileNameAndPath = CStr(varSelectedItem)
        Next varSelectedItem
      Else
        Debug.Print "User pressed Cancel"
        strFileNameAndPath = ""
      End If
   End With
    
   Set fil = fso.GetFile(strFileNameAndPath)
   Debug.Print "File size: " & fil.Size
   If fil.Size <= lngFileSize Then
      SelectFileWithSizeCheck = strFileNameAndPath
   Else
      MsgBox "File exceeds the allowed size; can't import"
      SelectFileWithSizeCheck = ""
   End If
    
ErrorHandlerExit:
   Set fd = Nothing
   Exit Function

ErrorHandler:
   MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description
   Resume ErrorHandlerExit

End Function


3. อย่าเพิ่งปิดหน้าต่างที่ใส่ Code ให้เลือก Tools>References แล้วเลือก Microsoft Office Object Library และ Microsoft Scripting Runtime Library
4. กด Ctrl+S ตามด้วย Alt+F4
5. จะกลับมาที่หน้าต่าง Access ให้เปิดฟอร์มในมุมมองออกแบบ
6. เลือก Expression Builder ที่ On Click ของออบเจ็กต์ที่ต้องการ Attached
7. เลือก Functions>ชื่อไฟล์ Access>ชื่อ Function จะอยู่ใน Box ขวาสุด
8. กำหนด «lngFileSize» เป็นขนาดไฟล์ที่ต้องการ
9. บันทึกไฟล์แล้วลองใช้งานดูครับ
6 @R24201
ไฟล์ตัวอย่างครับ

ที่นี่
7 @R24204
ทำตามขั้นตอนแล้วครับ แต่ตรงที่ Function ขวามือสุดไม่มีอะไรให้เลยเลย



8 @R24205
อื่ม! แชร์ให้ฟังนะครับ ถ้ามีการเก็บรูปภาพเป็นจำนวนมากๆ จริงๆ ไม่แนะนำให้เก็บเป็น Attachment นะครับ เพราะไฟล์ Access มีข้อจำกัดขนาดอยู่ที่ 2GB ถ้าเป็นรูปเข้าไปในไฟล์จะเต็มเร็วมากครับ หรือหากคิดว่าจะใช้การเก็บไฟล์ Attachment แบบใช้ไฟล์ Access หลายๆไฟล์ แล้วนำตารางมา Union กัน สำหรับฟิลด์ที่เป็น Attachment ก็ไม่รองรับอีกต่างหาก (ผมเคยคิดนะทำแบบนั้นแต่ก็ไม่สำเร็จ) ดังนั้นหากต้องการเก็บรูปภาพแบบ Attachment จริงๆ และต้องการให้ประหยัดเนื้อที่มากที่สุด คงต้องย่อขนาดภาพให้เล็กลงก่อนตามขนาดและคุณภาพที่ไม่สูงนักโดยใช้คำสั่งแบบเป็น Command ไฟล์ หาจากเน็ทมีหลายตัวให้ใช้ได้ครับ ส่วนตัวผมใช้ของ ImageMagick ไฟล์ชื่อ Convert.exe มีพารามิเตอร์ให้ปรับแต่งภาพได้ค่อนข้างครบ แต่จะมีความยุ่งยากอยู่ตรงที่การเขียนโค้ด คือต้องเขียนตรวจสอบว่าภาพเป็นสี่เหลี่ยมแบบไหน แนวนอนหรือตั้งก่อนเพราะเราต้องการย่อด้านที่ยาวที่สุดเป็นหลัก และย่อตามอัตราส่วนด้วย ซึ่งมันต้องใช้คำสั่งหลายคำสั่งมากอยู่

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

คลิ๊กที่นี่
9 @R24207
@Prajak

ต้องเพิ่มเข้าไปใน Module กลางครับ

Alt+F11 > คลิกขวา > Insert Module แล้วเอา Code ไปใส่ที่โมดูลกลางครับ

ถ้าเอาไปใส่ใน Form Module มันจะเรียกใช้ไม่ได้ครับ

ปล. ขอโทษที ผมนึกว่าไฟล์คุณมีโมดูลกลางอยู่แล้วครับ

อ้อ! วิธีของคุณ TTT จะดีกว่าวิธีที่ผมแนะนำนะครับ
10 @R24209
ขอบคุณทุกคำแนะนำเลยนะครับ เดี๋ยวผมจะลองทำดู
11 @R24270
ขอบคุณ คุณTTT มากนะครับที่แนะนำ ( เดี๋ยวผมจะทดลองทำต่อครับ)
คุณธัชชัยครับ ถึงตรงนี้แล้ว ต้องไปกำหนดขนาดไฟล์ตรงไหนครับ ยกตัวอย่างเช่น
ผมต้องการให้รูปมีขนาดไม่เกิน 100 kb.


12 @R24271
8. กำหนด «lngFileSize» เป็นขนาดไฟล์ที่ต้องการ
13 @R24274
ถ้ากำหนดไม่เกิน 100 kb ต้องกำหนดประมาณนี้มั้ยครับ ลองแล้วไม่ได้ครับ

14 @R24275
ส่งไฟล์มาให้ดูหน่อยครับ
15 @R24279
ฝากช่วยดูให้ด้วยนะครับ คุณธัชชัย

https://wetransfer.com/downloads/da36a8dcd1c3b4e511222727c8639bff20171112021937/38910e3d3d16da30a57085423c52ff5620171112021937/2ca5ce
16 @R24282
ปัญหาของคุณคือ เอา Module ไปใส่ที่ On Load ของฟอร์มครับ มันเลยไม่ทำงาน
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1616s