แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - apirak

หน้า: 1 2 3 [4] 5
55
ผมได้ปรับปรุงโปรแกรมให้มีการจัดเก็บเป็นหมวดหมู่ นะครับ
ตารางมีดังนี้


Tbl_GroupNum ตารางนี้เก็บรหัสประจำกลุ่มของรูปภาพ สมมุติกลุ่ม 1 มีภาพ 1 2 3 4 5 6 ไปเรื่อยๆ ครับ
Tbl_Picture       ตารางนี้เก็บรหัสของกลุ่มไว้ และเก็บตำแหน่ง Path เดิมที่รูปภาพอยู่ และ ตำแหน่งรูปภาพใหม่ ที่เรา Copy ไปเก็บไว้โฟลเดอร์
TempPath        ตารางนี้เก็บตำแหน่ง Floder ที่ใช้ในการเก็บรูปภาพที่เราต้องการ โดยไปสร้าง Floder ไว้ให้เรียบร้อยแล้ว กำหนด Path ใน       
                      Combobox ครับ

การใช้งาน

1.เมื่อเราเปิดโปรแกรมมาโดยยังไม่ได้มีการเพิ่มข้อมูล NO จะเริ่มต้นให้เองที่เลข 1
2.กำหนด ตำแหน่งจัดเก็บไปยัง Floder ปลายทางให้เรียบร้อย
3.กด Import เลือกรูปที่ต้องการจัดเก็บ
4.กด Add เพื่อบันทึกรูปภาพไปยังตาราง และข้อมูลจะแสดงที่ ตารางด้านขวาขึ้นทันที
5.เมื่อเพิ่มรูปภาพใน Group เดิมเสร็จแล้ว ต้องการสร้าง Group ใหม่ สามารถกดที่ New Group ได้เลยครับ
6.ถ้าต้องการค้นหาหรือเรียกดู Group อื่น ก็ใส่รหัส Group ที่ textbox GOTO GROUP แล้วกด OK
7.เมื่อเลือกรูปภาพแล้วอยาก Clear Form เพื่อเอารูปภาพใหม่ กดปุ่ม Clear
8.คลิ๊กที่เลขลำดับด้านขวา จะแสดงรูปตัวอย่างของรูปภาพที่เรา Add ไปแล้ว


[info]อัพเดท ตัวใหม่ล่าสุดใช้การรันลำดับการนำเข้าด้วยครับ สะดวกต่อการตรวจสอบ[/info]
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

56
อ้างถึง
เพิ่มนามสกุลไฟล์จาก JPG เป็นไฟล์รูปภาพอื่นต้องเพิ่มอย่างไรครับ



ถ้าจะเพิ่มการเก็บไฟล์รูปภาพประเภทอื่นๆ ด้วยลองใส่ตามนี้ครับมี 2 แบบให้เลือก
โค๊ด: [Select]
Private Sub Import_Click()
Dim File As FileDialog
Dim strPath, StrFile, SetPathon As String
If IsNull(Me.SetPath) Then
MsgBox "กรุณากำหนด Path ที่จะจัดเก็บก่อน", vbInformation, "แจ้งเตือนขั้นตอน"
Else
Set File = Application.FileDialog(msoFileDialogFilePicker)
With File
        .Title = "เลือกรูปภาพ"
        .Filters.Clear
        .Filters.Add "JPG", "*.JPG"
        .Filters.Add "BMP", "*.BMP"
        .Filters.Add "JPEG File ", "*.JPEG"
        .Filters.Add "GIF", "*.GIF"
        .Filters.Add "PNG", "*.PNG"
        .Filters.Add "TIFF", "*.TIFF"
        .Filters.Add "ALL Pictures", "*.JPG,*.BMP,*.JPEG,*.GIF,*.PNG,*.TIFF"
 End With
If File.Show Then
Me.PhotoPath = File.SelectedItems.Item(1)
End If
If Not IsNull(PhotoPath) Then
SetPathon = SetPath
strPath = Me.PhotoPath
StrFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
Me.SetPath = SetPathon & "\" & StrFile
End If
End If
End Sub

หรือแบบไม่ต้องกำหนด ประเภทไฟล์คือให้แสดงทุกรูปแบบนามสกุลไฟล์ที่เป็นรูปภาพตามที่เรากำหนดประมาณนี้ครับ

โค๊ด: [Select]
Private Sub Import_Click()
Dim File As FileDialog
Dim strPath, StrFile, SetPathon As String
If IsNull(Me.SetPath) Then
MsgBox "กรุณากำหนด Path ที่จะจัดเก็บก่อน", vbInformation, "แจ้งเตือนขั้นตอน"
Else
Set File = Application.FileDialog(msoFileDialogFilePicker)
With File
        .Title = "เลือกรูปภาพ"
        .Filters.Clear
        .Filters.Add "ALL Pictures", "*.JPG,*.BMP,*.JPEG,*.GIF,*.PNG,*.TIFF"
End With
If File.Show Then
Me.PhotoPath = File.SelectedItems.Item(1)
End If
If Not IsNull(PhotoPath) Then
SetPathon = SetPath
strPath = Me.PhotoPath
StrFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
Me.SetPath = SetPathon & "\" & StrFile
End If
End If
End Sub

ส่วนการเลือกรูปหลายรายการนั้น ต้องดูว่าท่านออกแบบตารางเก็บข้อมูลไว้แบบไหน ถึงจะแนะนำได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

57
เห็นไม่มีใครมาตอบ เลยขอแนะนำวิธีการนะครับ โดยวิธีการในการวางแผนซ่อมบำรุงนั้นจะต้องมีทั้งที่เป็น Software และ Maintenance Card ใช้งานคู่กัน (เข้าใจว่าคุณคงมี Maintenance Card อยู่แล้ว)

ในส่วนของ Software คุณควรมีตารางอีก 1 ตาราง แล้วมีฟิลด์ดังนี้ (GroupID, GroupName, Frequency,FrequencyUnit)
โดยที่ GroupID ก็คือรหัสกลุ่ม
GroupName ก็ชื่อกลุ่ม Pump, Safety Value, Tank (Internal), Tank (External), Transformer
Frequency ก็ความถี่ เช่น 6 เดือน ก็ใส่เป็น 6 (สำหรับพวกที่ทำปีละ 2 ครั้ง)
Frequency Unit ก็ เดือน, ปี ว่ากันไป (ใช้ตัวย่อตามสิ่งที่ให้ไปนะครับ จะได้ใช้ในคำสั่ง DateAdd ได้)

สำหรับตารางบันทึกของสิ่งของ ก็สามารถรวมกันเป็นตารางเดียวกันได้ แต่ต้องมี ID Number ของแต่ละตัวด้วย ไม่ควรแยกกันแบบนี้ จากนั้นก็กำหนดให้มี GroupID ว่า สิ่งนี้มันอยู่ในกลุ่มใด
โดยตารางอาจมีฟิลด์ดังนี้ (StuffID, StuffName, StuffDetails,GroupID)

แล้วก็ต้องมีตารางบันทึกว่าสิ่งของอันนี้มีการซ่อมบำรุงไปเมื่อไหร่ โดยควรมีฟิลด์ดังนี้ (StuffID,MaintenanceDate,MaintenanceNote)

สรุปตรงนี้มี 3 ตารางนะครับ
1. ตารางกลุ่มสิ่งของ
2. ตารางสิ่งของ
3. ตารางบันทึกการซ่อมบำรุง

เวลาต้องการตรวจสอบว่าสิ่งของใดมีนัดตรวจสอบเมื่อใด ก็ใช้คิวรีเลือก Maximum (MaintenanceDate) ด้วยคำสั่ง DateAdd

อันนี้คือตัวอย่างการใช้คำสั่ง DateAdd ครับ

https://support.office.com/en-ie/article/dateadd-function-63befdf6-1ffa-4357-9424-61e8c57afc19
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

58
เพิ่มเติม

Safety valve ปีละ 1 ครั้ง
หม้อแปลง ปีละ 1 ครั้ง
PRESSURE RELIEF VALVE ปีละ 1 ครั้ง
Tank จะมีแยก2 คอลัมณ์
Internal 15ปี 1 ครั้ง
External ปีละ 1 ครั้ง


เหลือ เช็คทุก 6 เดือนไว้ว่างๆ จะทำตัวอย่างให้ดูครับ
Field Fix คือช่วงเดือนละปีที่ถึงวันครบรอบนะครับ
ปล แก้ระบบค้นหาตามเงื่อนไขให้ใหม่แล้วด้วยนะคับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

59
อ้างถึง
หนูต้องการอยากจะตรวจสอบชื่อไฟล์ว่า หากไฟล์ที่เปิดนั้น เพียงมีชื่อ ขึ้นต้นด้วยคำว่า"Backup" ก็ให้มีการแจ้งเตือนดังกล่าวทันที

ถ้าจะสร้างการตรวจสอบเมื่อเปิดไฟล์ขึ้นมางั้นเราจะเพิ่มโค้ดตรวจสอบไว้ที่ AutoExec นะครับ
โดย Macro และ Module นี้นำไปไว้ที่ โปรแกรมหลักของเราเลย เวลา Copy ไฟล์ Macro และ Module นี้จะติดมาด้วย

ขั้นตอนที่ 1 สร้าง Module ใส่
โค๊ด: [Select]
Public Function AutoExec_AutoExec()
On Error GoTo AutoExec_AutoExec_Err
   Dim strFileName As String
   Dim DFileName As String
   
   strFileName = CurrentProject.Path & "\" & CurrentProject.Name
    DFileName = Dir(strFileName)
   
   If Left(DFileName, 6) = "Backup" Then
   MsgBox "ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่", vbInformation, "แจ้งเตือน"
    DoCmd.Quit
   End If
AutoExec_AutoExec_Exit:
    Exit Function
   
AutoExec_AutoExec_Err:
    MsgBox Error$
    Resume AutoExec_AutoExec_Exit
   
End Function

ขั้นตอนที่ 2 สร้างมาโครขึ้นมา 1 อันใส่โค้ดนี้ไปตั้งชื่อว่า AutoExec


เท่านี้เวลาเปิดไฟล์ไหนก็แล้วแต่ที่ Copy มา ถ้าไฟล์ ชื่อขึ้นต้นด้วย BackUp ก็จะแสดง Msgbox แจ้งเตือนทันทีคับ

ผมมีตัวอย่างไฟล์ ลองกด Botton Copy แล้วไปลองเปิดไฟล์ Backup ที่ Drive D ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

60
ขออนุญาตใช้กระทู้นี้ต่อคำถามเพิ่มเติมนะคะ
 หนูมีโปรเจ็คชื่อ Sample หนูลองนำคำสั่งในนี้ไปประยุกต์ใช้เป็นดังนี้
โค๊ด: [Select]
oFSO.CopyFile CurrentProject.Path & "\" & CurrentProject.Name, "D:\" & "Backup " & CurrentProject.Name
ซึ่งมันก็ใช้ได้ดีเลยทีเดียว โดยจะได้ไฟล์สำรองเป็น BackupSample ตามที่ต้องการ
ประเด็นปัญหาก็คือ หากเราไปเปิดตัวไฟล์สำรอง BackupSample แล้วสั่งสำรองข้อมูล
มันก็จะได้ไฟล์สำรองตัวใหม่เป็น BackupBackupSample

หนูจึงอยากได้ว่า หากมีการเปิดไฟล์โปรเจ็คที่ มีชื่อขึ้นต้นว่า Backup
ก็ให้มีข้อความบอกผู้ใช้ว่า"ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่" ประมาณนี้ค่ะ
ไม่ทราบว่าต้องทำอย่างไรคะ

สร้าง Function มาเช็คดูก็ได้คับ ว่าไฟล์เปิดใช้งานจริงหรือไม่

โค๊ด: [Select]
Function checkFileOpen(FilePath As String)
    Dim iFile As Long
    Dim OnErr As Long
    On Error Resume Next
    iFile = FreeFile()
    Open FilePath For Input Lock Read As #iFile

    Close iFile
    OnErr = Err
    On Error GoTo 0
     
    Select Case OnErr
    Case 0:    checkFileOpen = False
    Case 70:   checkFileOpen = True
    End Select
     
End Function

Private Sub Command0_Click()
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")

If checkFileOpen("D:\" & "Backup " & CurrentProject.Name) = False Then
   oFSO.CopyFile CurrentProject.Path & "\" & CurrentProject.Name, "D:\" & "Backup " & CurrentProject.Name
   Set oFSO = Nothing
   
Else
    MsgBox "ไฟล์นี้เป็นไฟล์สำรองไม่ควรเปิดใช้งานจนกว่าจะเปลี่ยนชื่อไฟล์ใหม่", vbInformation, "แจ้งเตือน"
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

61
เนื่องจาก Message Box ไม่อนุญาตให้โค้ดบรรทัดต่อไปทำงาน จนกว่าจะปิดกล่องข้อความที่แสดงไป ดังนั้นเราจึงต้องไปใช้อย่างอื่นทำหน้าที่แสดงข้อความแทน เช่น สร้างฟอร์มเพื่อทำหน้าที่เป็น Message Box, แสดงข้อความบน Textbox หรือ Command Button ภายในฟอร์มของตัวของเขาเองครับ ส่วนตัวผมเอง ผมหาพื้นที่สักส่วนนึงบนฟอร์มแล้วสร้าง Textbox เพื่อแสดงข้อความครับ ง่ายดี พอทำงานเสร็จ จะ Invisible มันไปด้วยก็ได้ หรือจะเคลียร์ข้อความใน Textbox ทิ้งก็ได้ ตย.เช่น

    Dim oFSO As Object
    Dim strDestination As String
    strDestination = "\\server\"
    DBEngine.Idle
    Set oFSO = CreateObject("Scripting.FileSystemObject")
   
    Me.[ชื่อ Textbox].Visible = True
    Me.[ชื่อ Textbox] = "ข้อความ"

    oFSO.CopyFile CurrentProject.Path & "Data1.accdb", strDestination   
    Set oFSO = Nothing
   
    Me.[ชื่อ Textbox].Visible = False
    Me.[ชื่อ Textbox] = ""

    MsgBox ("สำรองข้อมูลเสร็จแล้ว"), vbOKOnly + vbInformation, "Process Completed"

แต่ถ้าต้องการสร้างเป็นฟอร์มแทน Message Box ก็ไปสร้างฟอร์มโดยกำหนด Property ของฟอร์มเป็นค่าเหล่านี้
Pop up เป็น Yes
Scroll bars เป็น Neither
Record Selector เป็น No
Navigation Button เป็น No
Auto Resize เป็น Yes
Auto Center เป็น Yes
Border Style เป็น Thin หรือจะเป็น None ก็ได้ ลองดูเอาแบบที่ชอบครับ
Control เป็น None
แล้วก็สร้าง Textbox เพื่อไว้แสดงข้อความ พอจะใช้งาน ก็เพียงเปิดฟอร์มนี้ ใส่ข้อความลง Textbox แล้วปิดเมื่อทำงานเสร็จ เท่านี้เองครับ

โพสต์นี้ได้รับคำขอบคุณจาก: apirak

62
อ่านแล้ว งง คำถาม แต่ งง ไปอีก ทำไมอาจารย์เก่งจัง
เดาได้ด้วยว่าเค้าถามอะไร

:question: พูดแล้วผมเองก็อยากรู้เลยว่าคำถามไหน ยังพอจำโพสนั้นได้ไหมครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

63
อ่านแล้ว งง คำถาม แต่ งง ไปอีก ทำไมอาจารย์เก่งจัง
เดาได้ด้วยว่าเค้าถามอะไร
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

64
สนับสนุนการบ่นอีกเสียงครับ

บางคำถามอ่านแล้วได้แต่ถอนใจ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

65
คำถามจำนวนมาก ถามโดยแทบจะไม่อธิบายอะไรมาเลย ไม่ทราบคนถามจะรู้ไหมว่าคนอ่าน(เอาเป็นว่าอย่างน้อยก็ผมแล้วกัน)รู้สึกเหมือนโดนถามว่า "อยากได้จรวดไปดาวอังคาร ช่วยหน่อยครับ" จริงๆนะ แล้วจะให้ตอบอย่างไร ก็จะกลายเป็นต้องถามกลับไปว่า คุณได้ใช้อุปกรณ์อะไร ออกแบบอะไรยังไงไปแล้วบ้าง เอามาให้ดูหน่อย ซึ่งถ้าเป็นสมัยก่อน ผมก็จะพยายามถามกลับ แต่ยอมรับว่าเดี๋ยวนี้ โอกาสน้อยที่ผมจะถามกลับแล้ว ถ้าอ่านแล้วพบว่าข้อมูลที่ให้มาพร้อมคำถามของผู้โพสนั้นมีน้อยมาก ก็จะข้ามไปเลย หรือถามแล้วอ่านไม่เข้าใจเลย ผมก็ขอข้ามไปเหมือนกัน

ดังนั้น เพื่อเพิ่มความสมบูรณ์ของคำถาม มันก็มีหลายวิธี แต่หลายๆวิธีคงวุ่นวายไป ก็เลยคิดว่าก่อนระบบจะรับโพส อยากให้มี message box แสดงข้อความ "เขียนถามให้ผู้ตอบเข้าใจ..." ตามข้อความเตือนสีแดงๆที่อยู่บนหัวเพจอีกที และอาจมีข้อความอื่นเพิ่มเติมเพื่อเน้นว่าเขาแน่ใจไหมว่าได้อธิบายละเอียดแล้ว ถ้าเขาไม่ยืนยัน ก็ให้เขากลับไปแก้ข้อความ แต่ถ้าเขากดยืนยัน ก็ค่อยโพสจริงๆอีกที

ถามยาว โอกาสได้รับคำตอบเร็วมีสูง -- ถามสั้น โอกาสน้อยลง -- ถามสั้นมากๆ ยากที่จะมีโอกาส
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

66
ดันๆ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

67
อะไรที่เป็นรายได้ของเวป ทำเลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

68
ดันขึ้นบนหน่อย ขอความช่วยเหลืแอแสดงความคิดเห็นกันด้วยนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

69
สวัสดีชาว ms access ทุกท่านครับ เผลอแปปเดียวเว็บบอร์ดใหม่แห่งนี้ก็เปิดมาได้ปีกว่าล่ะ :grin:


จากที่ผ่านมาจะพบว่ามีการตั้งกระทู้หรือโพสต์แนวโฆษณา-ประชาสัมพันธ์แล้วถูกลบกระทู้ไปนั้นจึงอยากจะขอความคิดเห็นจากทุกท่านว่า...

1.เปิดห้องให้สามารถลงโฆษณาได้แยกต่างหากไปดีหรือไม่
2.หากมี Banner ข้างบน(ตามรูปตัวอย่าง)เพื่อเป็นรายได้ในการดูแลรักษาเว็บท่านคิดเห็นเช่นไร


*กดโหวตหรือตอบกระทู้แสดงความคิดเห็นมากันได้เลยนะครับ
ปล.ก่อนหน้าได้ท่าน OddyWriter ใจบุญนำหนังสือมาขายเพื่อเว็บนะ  :meaw:
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

70
ที่ปุ่มคำนวนของท่านปิ่นณรงค์ใส่ +1ไปครับ
โค๊ด: [Select]
Me.totalDay = DateDiff("d", ([Forms]![TableReport]![BeginDate]), ([Forms]![TableReport]![EndDate]) + 1) & "  วัน"
ปล.ตอบมาแบบ...อ่านะครับ ไม่รู้ใช้คำตอบหรือแนวทางแก้ปัญหาจริงๆใหมช่วยชี้แจงมาด้วยนะครับ(จะได้แจ้งลบ --.--)
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

71
ยินดีครับ thai access บอร์ดแห่งการแชร์ประสบการณ์ การแบ่งปันและการเรียนรู้ครับ ผมเริ่มจากไม่เป็นเลยได้เรียนรู้จากบอร์ดนี้แหละครับ จนพอที่จะแนะนำได้บ้าง :meaw:
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

72
ของ Weight_ChgRate ถ้า >20 กำหนดราคาเดียวคือ 20 ก็ใส่แบบนี้แทนนะคับ

โค๊ด: [Select]
Weight_ChgRate: IIf([Weight_Chg] Between 1 And 2,"1") & IIf([Weight_Chg] Between 3 And 4,"3") & IIf([Weight_Chg] Between 5 And 9,"5") & IIf([Weight_Chg] Between 10 And 14,"10") & IIf([Weight_Chg] Between 15 And 19,"15") & IIf([Weight_Chg]>=20,"20")
ส่วนการคำนวนต่อไปถ้าติดตรงไหนบอกได้นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: apirak

หน้า: 1 2 3 [4] 5