กระทู้เก่าบอร์ด อ.Yeadram
2,020 16
URL.หัวข้อ /
URL
สอบถามการจำกัดขนาดของไฟล์แนบครับ
ถ้าผมต้องการจำกัดขนาดของไฟล์รูปภาพที่จะแนบ ว่าไม่ให้ขนาดเกินกี่ kb
จะต้องกำหนดค่าตรงไหนครับ เนื่องจากในการใช้งานจริง จะต้องมีการแนบรูปจำนวนมาก แทบทุก item กลัวฐานข้อมูลจะมีขนาดใหญ่เกินไปครับ รบกวนด้วยนะครับ
จะต้องกำหนดค่าตรงไหนครับ เนื่องจากในการใช้งานจริง จะต้องมีการแนบรูปจำนวนมาก แทบทุก 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
(ลอกเขามา ไม่ได้คิดเอง)
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. บันทึกไฟล์แล้วลองใช้งานดูครับ
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 จะดีกว่าวิธีที่ผมแนะนำนะครับ
ต้องเพิ่มเข้าไปใน Module กลางครับ
Alt+F11 > คลิกขวา > Insert Module แล้วเอา Code ไปใส่ที่โมดูลกลางครับ
ถ้าเอาไปใส่ใน Form Module มันจะเรียกใช้ไม่ได้ครับ
ปล. ขอโทษที ผมนึกว่าไฟล์คุณมีโมดูลกลางอยู่แล้วครับ
อ้อ! วิธีของคุณ TTT จะดีกว่าวิธีที่ผมแนะนำนะครับ
10 @R24209
ขอบคุณทุกคำแนะนำเลยนะครับ เดี๋ยวผมจะลองทำดู
11 @R24270
12 @R24271
8. กำหนด «lngFileSize» เป็นขนาดไฟล์ที่ต้องการ
14 @R24275
ส่งไฟล์มาให้ดูหน่อยครับ
15 @R24279
ฝากช่วยดูให้ด้วยนะครับ คุณธัชชัย
https://wetransfer.com/downloads/da36a8dcd1c3b4e511222727c8639bff20171112021937/38910e3d3d16da30a57085423c52ff5620171112021937/2ca5ce
https://wetransfer.com/downloads/da36a8dcd1c3b4e511222727c8639bff20171112021937/38910e3d3d16da30a57085423c52ff5620171112021937/2ca5ce
16 @R24282
ปัญหาของคุณคือ เอา Module ไปใส่ที่ On Load ของฟอร์มครับ มันเลยไม่ทำงาน
Time: 0.3369s