แสดงกระทู้

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 - Tatchawin

หน้า: 1 2 3 4 [5]
73
ตามหลักการแล้ว อะไรที่ขึ้นกับคนนั้นและไม่มีทางเปลี่ยน ก็ให้ผูกกับเทเบิลที่มี Primary Key เป็น NationalID เช่น วันเกิด  แต่อะไรที่เปลี่ยนแปลงไปได้ เช่น ชื่อ นามสกุล ที่อยู่ เบอร์โทร ก็ต้องผูกกับเทเบิลที่มี Primary Key เป็น NationalID + NumberOfEdited  แต่เท่าที่ดู มีแค่ฟิลด์วันเกิดเท่านั้นที่ไม่เปลี่ยนแปลง ดังนั้นการจะแยกเป็นอีกเทเบิลที่มีแต่ฟิลด์ NationalID กับ BirthDate อาจจะดูไม่คุ้มกับการทำ ผมคิดว่าให้เทเบิล tbl_Contracter และ tbl_Address มี Primary Key เป็น NationalID + NumberOfEdited ไปเลยจะดีกว่า และคิดว่าเพิ่มฟิลด์ประเภท Boolean อีกฟิลด์ทั้งใน 2 เทเบิล เพื่อบอกว่า Edition ไหน เป็น Edition ปัจจุบันไปด้วย จะทำให้ตอนค้นหาข้อมูลปัจจุบันเพื่อนำมาใช้ในส่วนต่างๆ ไม่ยุ่งยากเมื่อเทียบกับการต้องหาว่า Edition ไหนเป็น Edition ล่าสุดโดยไม่มีฟิลด์ที่ว่า แต่ก็ต้องจัดการให้ดีๆว่า ในขณะใดขณะหนึ่งต้องมีเพียงเรคอร์ดเดียวเท่านั้นที่ฟิลด์ที่ว่ามีค่าเป็น True    ส่วนเทเบิลอื่นๆที่ต้องโยงมายัง 2 เทเบิลนี้ ก็ต้องเก็บทั้ง NationalID และ NumberOfEdited ไปด้วย ดังนั้น transaction ต่างๆก็จะอิงกับข้อมูลที่เป็นปัจจุบัน ณ เวลานั้นครับ

ขอบคุณสำหรับคำตอบมากๆครับ ท่านมีตัวอย่างไฟล์ที่เคยทำในลักษณะนี้ไหมครับ หรือท่านใดที่มีไฟล์หรือมีประสบการณ์ด้านนี้ ช่วยแนะนำผมหน่อยนะครับ

ขอบคุณครับ

74
ขอบคุณสำหรับคำตอบมากๆครับ ท่านมีตัวอย่างไฟล์ที่เคยทำในลักษณะนี้ไหมครับ หรือท่านใดที่มีช่วยแนะนำผมหน่อยนะครับ

ขอบคุณครับ

75
ตัวอย่างของข้อมูลที่พบร่างๆไว้นะครับ ว่าควรจะมีข้อมูบอะไรบ้าง


76
สวัสดีครับทุกท่าน ผมมีคำถามเกี่ยวกับการจัดทำโปรแกรมบันทึกประวัติแรงงานรับเหมา(แรงงาน Outsource ไม่ใช่พนักงานของบริษัท)ครับ
เนื่องจากผมได้ดูคลิป: ระบบบันทึกเวลาเข้าออก: Ep.2 (ฟอร์มจัดการข้อมูลพนักงาน)
ของคุณ Access Creator(คิดว่าท่านคงอยู่ในเว็บบอร์ดนี้แน่ๆ)
แล้วมีโจทย์จากทางหัวหน้าพอดี ก็เลยจะมาลองทำดู จุดประสงค์ของโปรแกรมมีดังนี้ครับ

จุดประสงค์
1. จัดเก็บประวัติส่วนตัวพนักงาน ได้แก่ ประวัติทั่วไป(ชื่อ ที่อยู่ วันเกิด สังกัดบริษัท เริ่มงานวันที่ ลาออก ย้ายงาน การถูกลงโทษ ลักษณะงานที่ทำ สังกัดแผนกใดในโรงงาน ฯลฯ)
2. จัดเก็บประวัติการอบรมหลักสูตรตามกฎหมาย ยกตัวอย่างเช่น ลักษณะงานที่ทำเป็นงานผลิต ก็ต้องอบรมการใช้สารเคมี ทำงานเกี่ยวกับขับรถยก ก็ต้องอบรมขับขี่ปลอดภัย
3. จัดเก็บประวัติการตรวจปัจจัยเสี่ยง เช่น ทำงานสัมผัสสารเคมีต้องตรวจเลือด ทำงานเกี่ยวกับการขับรถต้องตรวจตาบอดสี

ทีนี้พอลอง ออกแบบ Databased ผมพบว่าหัวใจสำคัญน่าจะอยู่ที่ ข้อ 1 ครับ ถ้าข้อ 1 ทำได้ตามความต้องการ
ข้อ 2 และ3 ก็ไม่น่ายาก โดยเฉพาะข้อ 3 ที่มีข้อมูลจากบริษัทตรวจสุขภาพพนักงานส่งมาให้แล้ว ทั้งนี้ ผมมีความต้องการดังนี้

ความต้องการข้อการจัดการข้อมูลแรงงานรับเหมา
 - กรณีแรงงานรับเหมาเปลี่ยนชื่อ: ผมอยากจะให้เมื่อพนักงานเปลี่ยนชื่อแล้ว ไม่ไปกระทบกับ Transaction เดิม เช่น เดิมชื่อนายสมชาย เปลี่ยนเป็นพุฒิพงษ์ ผมก็อยากให้เก็บ Record ของนายสมชายไว้ครบ ทั้งที่อยู่ เบอร์โทร ลักษณะงานที่ทำ สังกัดบริษัท ประวิตการถูกลงโทษ ฯลฯ เมื่อเปลี่ยนชื่อแล้วก็เริ่มเป็น Record ใหม่ของนายพุฒิพงษ์ แต่ทุกอย่างยังคงเหมือนสมัยที่ชื่อนายสมชาย เพียงแต่เปลี่ยนชื่อมาเท่านั้น
 - กรณีย้ายงาน: คล้ายกับข้อด้านบนครับ โดยที่เมื่อมีการย้ายงาน ก็อยากให้ใส่วันที่โยกย้าย(สิ้นสุดการทำงานในตำแหน่งนั้น) ให้เริ่ม Record ใหม่ โดยยกชื่อเดิม ที่อยู่เดิม สังกัดบริษัทเดิม ถูกลงโทษ ยกข้อมูลของเดิมในช่วงที่ทำงานนั้นมาเกือบหมด(ยกเว้นประวัติการฝึกอบรม ประวัติการตรวจปัจจัยเสี่ยง ที่อยากให้จบเป็นของช่วงเวลาที่ทำงานเดิม) แต่เปลี่ยนแค่ลักษณะงานที่ทำ
 - กรณีลาออก: ส่วนใหญ่แรงงานรับเหมาบริษัทผมจะเข้าๆออกๆอยู่เป็นประจำครับ ทำงานที่บริษัทเดิม สักพักก็ลาออกไป แล้วก็กลับมาสมัครใหม่ ในบริษัทใหม่ ผมอยากให้เก็บข้อมูลสมัยก่อนที่เขาจะลาออก ที่เคยทำงานกับบริษัทเดิมไว้ ไม่ทับกับของที่สมัครมาใหม่ มีการ Maintain วันที่ลาออก สาเหตุที่ลาออกไป

ความต้องการผมประมาณนี้ครับ ผมเลยไม่แน่ใจตั้งแต่การออกแบบ Databased ควรจะออกแบบอย่างไร แล้วจะต้องเอาไปทำ Query ต่ออย่างไรดี
เพื่อที่จะให้มีการเก็บทุก Transaction เอาไว้ ไม่มีการกระทบหรือบันทึกทับของเดิม นอกจากนี้แล้ว
ถ้าแรงงานรับเหมาแค่มีการเปลี่ยนชื่อหรือย้ายงานก็สามารถดึงข้อมูลบางส่วนหรือทั้งหมดที่เกี่ยวข้อง มาใช้ได้ Maintain วันย้าย วันลาออก เหตุผลย้าย เหตุผลลาออกได้

ประมาณนี้ครับ ไม่แน่ใจผมถามงงหรือเปล่า 555555
ยังไงรบกวนพี่ๆด้วยนะครับ ขอบคุณมากครับ

77
อ้างถึง
1. ผมต้องการทำเลขบอกลำดับด้านหน้า Record บนคล้าย Continuous Form คล้ายๆกับ Running Sum บน Report จะมีวิธีการทำอย่างไร? (ตามภาพ)

ขั้นตอนที่ 1 สร้าง Module เอา โค้ดนี้ใส่เข้าไป
โค๊ด: [Select]
Public Function RowNum(frm As Form) As Variant
On Error GoTo Err_RowNum
   
    With frm.RecordsetClone
        .Bookmark = frm.Bookmark
        RowNum = .AbsolutePosition + 1
    End With
   
Exit_RowNum:
    Exit Function
   
Err_RowNum:
    If Err.Number <> 3021& Then
        Debug.Print "RowNum() error " & Err.Number & " - " & Err.Description
    End If
    RowNum = Null
    Resume Exit_RowNum
End Function
ขั้นตอนที่ 2 สร้าง textbox ชื่อ No ที่ ControlSource ใส่ ว่า =RowNum([Form])


ลำดับก็จะรันอัตโนมัติครับ


อ้างถึง
2. ผมทำช่องให้กรอกช่วงเวลาที่ต้องการค้นหา Record(Search by Date Rage) เอาไว้ครับ(ตามภาพ)
แก้โค้ดเป็นแบบนี้ดูครับ ใช้การกำหนด Sql แทน แก้ชื่อ Form1 เป็นชื่อฟอร์มของคุณด้วยนะครับ
โค๊ด: [Select]
Sub Search()
Dim Sql As String
 If IsNull(Me.txtDateFrom) Or IsNull(Me.txtDateTo) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range Required"
    Me.txtDateFrom.SetFocus
    Sql = "SELECT * FROM qryTransactions ORDER BY qryTransactions.TransactionsDate;"
        Else
    Sql = "SELECT * FROM qryTransactions  WHERE (((qryTransactions.[TransactionsDate]) Between forms!Form1!txtDateFrom And forms!Form1!txtDateTo)) ORDER BY qryTransactions.TransactionsDate;"       
End If
        Me.Form.RecordSource = Sql       
End Sub

อ้างถึง
3. ผมต้องการให้แสดงผลลัพธ์ทั้งหมดที่ค้นหาได้ ตามภาพด้านบน จะมีแนวทางเขียนโค้ดอย่างไร
ผมสมมัติสร้าง textbox ไว้เก็บจำนวน Record ชื่อ txt_TotalRecordSearch
เวลาเราจะเรียกใช้ก็นำไปรวมกับ คำสั้งค้นหาวันที่ แบบนี้คับ

โค๊ด: [Select]
Sub Search()
Dim Sql As String
Dim FormRecCount  As Long
 If IsNull(Me.txtDateFrom) Or IsNull(Me.txtDateTo) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range Required"
    Me.txtDateFrom.SetFocus
    Sql = "SELECT * FROM qryTransactions ORDER BY qryTransactions.TransactionsDate;"
        Else
    Sql = "SELECT * FROM qryTransactions  WHERE (((qryTransactions.[TransactionsDate]) Between forms!Form1!txtDateFrom And forms!Form1!txtDateTo)) ORDER BY qryTransactions.TransactionsDate;"       
End If
        Me.Form.RecordSource = Sql
        Me.txt_TotalRecordSearch.ControlSource = "=Count(No)"
End Sub

ตัวอย่างด้านล่างนะครับ


ขอบคุณมากๆครับ เจ๋งมากๆ ผมแก้ไขตามที่ท่านให้แนวทางมา ทำได้จริง สุดๆครับ ขอคารวะ

78
สวัสดีครับทุกท่าน ผมมีปัญหามาถามทุกท่าน 3 ข้อ
1. ผมต้องการทำเลขบอกลำดับด้านหน้า Record บนคล้าย Continuous Form คล้ายๆกับ Running Sum บน Report จะมีวิธีการทำอย่างไร? (ตามภาพ)


2. ผมทำช่องให้กรอกช่วงเวลาที่ต้องการค้นหา Record(Search by Date Rage) เอาไว้ครับ(ตามภาพ) แต่พบปัญหาคือ
ผลลัพท์ที่ Search มาไม่ตรงที่ต้องการ โดยถ้าเปนการค้นหาในช่วงวันที่หลักเดียว เช่น วันที่ 1-9 ระบบจะค้นหา
โดยเป็นรูปแบบ เดือน/วัน/ปี แต่ถ้าเปนวันที่ 2 หลัก เช่น 10-31 ระบบจะค้นหาได้ผลลัพธ์ที่ถูกต้องแบบ วัน/เดือน/ปี
ผมจะมีวิธีแก้อย่างไร (โค้ดที่ผมเขียนเป็นอย่างนี้นะครับ)

Private Sub cmdSearch_Click()
    'Search button
Call Search
End Sub
_____________________________________________________________________________________________________
Sub Search()
Dim strCriteria, task As String
Me.Refresh
If IsNull(Me.txtDateFrom) Or IsNull(Me.txtDateTo) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range Required"
    Me.txtDateFrom.SetFocus
Else
    strCriteria = "([TransactionsDate] >= #" & Me.txtDateFrom & "# And [TransactionsDate] <= #" & Me.txtDateTo & "#)"
    task = "select * from qryTransactions where (" & strCriteria & ") order by [TransactionsDate] ASC"
    DoCmd.ApplyFilter task
End If
End Sub


3. ผมต้องการให้แสดงผลลัพธ์ทั้งหมดที่ค้นหาได้ ตามภาพด้านบน จะมีแนวทางเขียนโค้ดอย่างไร

ขอบคุณทุกท่านล่วงหน้าครับ
ปล. ข้อมูลที่เหน เป็นข้อมูลจำลองนะครับ มิใช่ของจริงแต่อย่างใด

79
เนื่องจากฐานข้อมูลมีการเปิดใช้ BigInt ไปแล้ว ซึ่งจะทำให้ฐานข้อมูลถูกอัพเกรดเป็น database รุ่น 16.7 อย่างถาวร ซึ่งจะเปิดใช้ได้เฉพาะ Access 2016 รุ่น 16.0.7xxx เป็นต้นไปเท่านั้น

วิธีแก้ไขคือให้เปลี่ยน data type จาก BigInt (Large Number) เป็น Number ธรรมดา

หลังจากนั้นให้สร้างไฟล์ Database ใหม่โดยที่ตรง Database Option ต้องไม่เปิดการใช้งาน BigInt (Support Bigint Data Type for Linked/Imported Tables ปกติมันจะไม่เปิดอยู่แล้ว) แล้วให้ Import ตารางจากไฟล์เก่าเข้ามาในไฟล์ Database ที่สร้างใหม่นี้แทน

https://support.office.com/en-gb/article/using-the-large-number-data-type-5b623f6e-641d-4e97-8bdf-b77bae076f70
https://support.office.com/en-gb/article/set-user-options-for-the-current-database-29b6b7be-4c3b-43a7-b8f0-5e1c68f5adce#largenumber

ไชโย! ทำได้แล้วครับ แก้ด้วยวิธีนี้ได้จริงด้วย ขอบคุณมากๆเลยครับ

80
ขออนุญาตเรียนถามท่านครับ ว่าของท่านเคยเจอเคสแบบผมไหม แล้วถ้าแก้ไขตามที่ท่านว่า สามารถเปิดดูได้รึเปล่าครับ ขอบคุณครับ

ไม่เคยครับ แต่ Microsoft มาตอบเองคุณก็ลองเช็คดูครับว่ามี field ที่เป็น BigInt หรือไม่ ถ้าใช่มันก็คือสาเหตุแหละครับ หรือไม่อย่างนั้นก็อัพเกรดตัว MS Access 2016 เป็น version 16.0.7xxx.xxxx or later. แต่ผมไม่แนะนำวิธีหลังเพราะเดี๋ยวมีลูกค้าไปเปิดใน 2013 หรือ 2010 ก็เจอปัญหาอีก
ลองวิธีแรกแล้วครับ ไม่ได้ผลเลย
แต่มีข้อสังเกตอยู่อย่างนึงว่าคอมพิวเตอร์เครื่องที่ผมใช้พัฒนาเปน o365 version 16.0.1xxxxx.xxxxx 32ิbit ส่วนเครื่องที่ใช้เปิดเปน MS Access 2016 version 16.0.4xxxx.xxxx 64bit แบบนี้เกี่ยวกันไหมครับ

ขอบคุณล่วงหน้าครับ

81
https://support.microsoft.com/en-us/help/3208802/database-you-are-trying-to-open-requires-a-newer-version-of-microsoft

มีการใช้ BigInt Data type เช็คตารางที่มีการใช้ BigInt ให้เปลี่ยนจาก large Number เป็น Number เฉยๆ

ขออนุญาตเรียนถามท่านครับ ว่าของท่านเคยเจอเคสแบบผมไหม แล้วถ้าแก้ไขตามที่ท่านว่า สามารถเปิดดูได้รึเปล่าครับ ขอบคุณครับ

82


นี่คือรูปภาพ pop up ตอนเปิดไฟล์ครับ ไม่เข้าใจว่า Version ก็ไม่ห่างกันเท่าไหร่ ทำไมถึงเปิดไม่ได้ จะมีวิธีแก้อย่างไรครับ

ขอบคุณครับ

83
เรียน ทุกท่านครับ

ผมพัฒนา Access บน o365 แต่เวลานำมาใช้งานจริง ผมจะนำมาใช้กับเครื่อง MS Access 2016 ครับ
ปัญหาคือ เมื่อผมนำไฟล์ Access ที่ทำจาก o365 มาเปิดใช้งานบน MS Access 2016 กลับเปิดไม่ได้ ทั้งที่ Version 2016 กับ Version o365 ไม่ห่างกันเท่าไหร่

อย่างนี้ผมมีวิธีแก้ไขอย่างไรครับ เพราะทำบน o365 มาจนจะสุดทางแล้ว แต่กลับเปิดใข้งานบน MS Access 2016 ไม่ได้

รบกวนทุกท่านหน่อยนะครับ
ขอบคุณมากครับ

84
ขอบคุณมากครับ ทำได้แล้วครับ

85
สวัสดีครับ

กำลังทำฟอร์มค้นหาใน MS Access ครับ โดยมีโค้ดตามด้านล่างนี้ ซึ่งผมต้องการสร้างเงื่อนไข เพื่อเช็คว่าถ้าค้นหาด้วย Keyword แล้วไม่พบ
ให้มี Msg box แจ้งเตือนขึ้นมา พอจะมีแนวทางแนะนำหรือช่วยเขียนโค้ดต่อให้ดูเปนตัวอย่างได้ไหมครับ

ขอบพระคุณมากๆครับ



Private Sub cmdSearch_Click()
    If IsNull(Me.txtSearch) Then
        MsgBox "Please fill keyword for search in search box", , "Keyword for Search"
        Me.txtSearch.SetFocus
    Else
        Dim strsearch As String
        Dim strText As String
        strText = Me.txtSearch.Value
        strsearch = "SELECT * from qryAllergic where ((BrieflySCGEmployeeID like ""*" & strText & "*"") or (EmpName like ""*" & strText & "*"") or (AllergicName like ""*" & strText & "*""))"
        Me.RecordSource = strsearch
    End If
End Sub

86
สวัสดีครับ จะรบกวนสอบถามทุกท่านครับ

ผมสร้าง form ขึ้นมาโดยมีทั้ง Main Form และ Sub Form ใน Form เดียวกัน แต่โดยผมเขียนโค้ด เพื่อให้ทั้ง Main Form และ Sub Form ใน Form
ถูก Save Record จากปุ่มเดียวเท่านั้น แต่ปรากฏว่าเมื่อผมกรอกข้อมูลจาก Main From แล้วเลื่อนไปคลิกยัง Sub Form ปรากฏว่า Main Form บังคับให้ผม Save
หรือไม่ข้อมูลใน Main Form ก็หายไปเลย

จะมีวิธีแก้ไขปัญหานี้อย่างไรให้สามารถกรอกข้อมูลทั้งใน Main Form และ Sub Form ได้ แล้วค่อย Save ทีเดียว

หมายเหตุ: Code ที่ผมเลือกใช้มาจาก
 - https://access-programmers.co.uk/forums/showthread.php?t=254970
 -


ขอบคุณสำหรับคำตอบล่วงหน้าครับผม

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