แสดงกระทู้

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

หน้า: [1] 2 3 4 ... 6
1
ใช้ function Replace() ดูนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

2
เครื่องคอมฯผมตั้งค่าแสดงวันที่เป็น US = แสดงผลออกเป็น ๒๐๒๔ เช่นกัน
จึงลองแกะโค้ดอ.TTT แล้วแก้ตรง
โค๊ด: [Select]
tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(IIf(Year(i) = Format(i, "yyyy"), Year(i) + 543, Format(i, "yyyy")))
ให้เหลือแค่
โค๊ด: [Select]
tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(Year(i) + 543)

ได้ผลลัพธ์เป็นปี ๒๕๖๗  :love:
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

3
เห็นคำถามนี้น่าสนใจตรงเราสามารถใช้งานตัวแปรอาร์เรย์แบบ 2 มิติได้ เลยลองทำดู แต่ไม่รู้ว่าเข้าใจความต้องการของเจ้าของกระทู้ถูกหรือป่าวนะครับ
โค๊ด: [Select]
Public Function Seminar(sDate As Date, eDate As Date) As String
    Dim i As Long, o As Long, iCount As Long, iSun As Long, mCount As Long
    Dim tDay() As String ' กำหนดตัวแปรอาร์เรย์ จำทำแบบ 2 มิติ มิติแรกใช้เก็บตัดช่วงวันอาทิตย์ มิติสองใช้เก็บวันที่ไม่ใช่วันอาทิตย์
    ' หาช่วงเวลาเป้าหมายว่ามีวันอาทิตย์ทั้งหมดกี่วัน เพิ่มใช้กำหนดค่าตัวแปรอาร์เรย์ในมิติแรก----------------------
    For i = sDate To eDate 'ลูปหาตั้งแต่วันเริ่มต้นจนวันสิ้นสุด
        If Weekday(i) = 1 Then 'วันไหนมี Weekday เท่ากับ 1 คือวันอาทิตย์ ตาม Default ของฟังก์ชั่น
            iSun = iSun + 1 'นับจำนวนวันอาทิตย์ไปเรื่อยๆ
        End If
    Next
    '--------------------------------------------------------------------------------------------------
    'เก็บวันที่เป้าหมายทั้งหมดที่ไม่ใช่วันอาทิตย์ ลงในตัวแปรอาร์เรย์แบบไดนามิก-----------------------------------
    For i = sDate To eDate 'ลูปหาตั้งแต่วันเริ่มต้นจนวันสิ้นสุด
        If Weekday(i) <> 1 Then ' เมื่อไม่ใช่วันอาทิตย์ (1 คือ วันอาทิตย์)
            mCount = IIf(iCount > mCount, iCount, mCount) 'หาตัวเลขขยายมากขึ้นในแต่ละลูปเพื่อนำมาปรับขนาดความยาวของอาร์เรย์
            'ขยายความยาวของอาร์เรย์ให้มากขึ้น ตามข้อมูลวันที่ ที่ต้องจัดเก็บลงตัวแปร เพราะข้อมูลมีจำนวนมากน้อยไม่แน่นอนจึงต้องใช้ตัวแปรแบบไดนามิก
            ReDim Preserve tDay(iSun, mCount) 'ขยายมากขึ้นได้ แต่ทำให้น้อยลงไม่ได้ เพราะข้อมูลค่าเก่าจะหาย
            'แปรงข้อมูลวันที่เป้าหมายที่ไม่ตรงกับวันอาทิตย์ ไล่ใส่ลงไปในตัวแปรอาร์เรย์แบบ 2 มิติ
            tDay(o, iCount) = cThaiNumber(Day(i)) & " " & MonthNameThai(i) & " " & cThaiNumber(IIf(Year(i) = Format(i, "yyyy"), Year(i) + 543, Format(i, "yyyy")))
            iCount = iCount + 1
        Else 'หากเป็นวันอาทิตย์
            o = o + 1 'หากเป็นวันอาทิตย์ ให้เลื่อนตัวแปรอาร์เรย์ในมิติแรกขึ้นไปอีกลำดับ เพื่อแยกชั้นตัวแปรระหว่างช่วงวันที่ติดวันอาทิตย์
            iCount = 0 'ปรับมิติที่สองให้เป็นลำดับ 0 เริ่มใหม่
        End If
    Next i
    '---------------------------------------------------------------------------------------------------
    'เรียกแสดงค่าตัวแปรอาร์เรย์ออกมาตามรูปแบบที่เราต้องการ------------------------------------------------
    Dim firstDay As Long 'เก็บค่าลำดับของมิติตัวแปรลำดับแรกที่จะแสดง
    Dim lastDay As String 'เก็บข้อมูลวันที่วันสุดท้ายก่อนถึงวันอาทิตย์
    Dim endDay As String 'เก็บวันที่สุดท้ายไว้ใช้ในข้อความ ให้ไว้ ณ วันที่
    Dim strDay As String 'ไล่เก็บรวบรวมสรุปข้อมูลแสดงทั้งหมด
    firstDay = -1 'เก็บค่าลำดับมิติตัวแปรแรกที่ไม่ตรงกับวันอาทิตย์ (กันไว้กรณีที่วันแรกของข้อมูลเป็นวันอาทิตย์พอดี ทำให้ตัวแปรมิติแรกอาจไม่ได้เริ่มต้นที่ 0 ก็ได้)
    For i = 0 To UBound(tDay, 1) 'ลูปตัวแปรอาร์เรย์ในมิติแรกที่มีการจัดเก็บ ตั้งแต่ลำดับแรกจนลำดับสุดท้าย
        lastDay = "" 'ล้างค่าวันที่สุดท้ายทุกครั้งเมื่อขึ้นมิติตัวแปรใหม่
        For o = 0 To UBound(tDay, 2) 'ลูปตัวแปรอาร์เรย์ในมิติสองที่มีการจัดเก็บ ตั้งแต่ลำดับแรกจนลำดับสุดท้าย
            If tDay(i, o) & "" <> "" Then 'ถ้าค่าตัวแปรอาร์เรย์ในมิตินั้นไม่ใช่ค่าว่าง (แสดงว่ามีข้อมูล)
                lastDay = tDay(i, o) ' ให้บันทึกในตัวแปร lastDay ไปเรื่อยๆ จนข้อมูลลูปไปถึงสุดท้ายเราก็จะได้วันที่วันสุดท้าย ของตัวแปรอาร์เรย์ในชั้นมิตินั้น
                endDay = lastDay
                If firstDay = -1 Then
                    firstDay = i 'หากตัวแปรอาร์เรย์ลำดับนั้นไม่ใช่ค่าว่าง ก็แสดงว่าให้เริ่มต้นวันที่ที่ลำดับมิตินั้น จึงบันทึกลงไปในตัวแปร fristDay
                End If
            End If
        Next o
        If i = firstDay Then 'ถ้า i เท่ากับค่าในตัวแปร firstDay แสดงว่าเป็นค่าวันที่แรกที่จะแสดง
            If tDay(i, 0) <> lastDay Then ' ถ้าวันที่นั้นไปใช่วันที่สุดท้ายในมิตินั้น แสดงว่าต้องมีวันที่ 2 ช่วง
                strDay = "วันที่ " & tDay(i, 0) & " - วันที่ " & lastDay ' บรรทัดแรกของวันที่ ที่จะแสดงให้ขึ้นต้นคำว่า วันที่
            Else
                strDay = "วันที่ " & tDay(i, 0) ' ถ้าวันที่นั้นเท่ากับวันที่สุดท้ายในมิตินั้นด้วย แสดงว่าจะมีวันที่แค่วันเดียว
            End If
        Else 'ถ้าเป็นบรรทัดต่อๆไป
            If tDay(i, 0) & "" <> "" And lastDay <> "" Then 'ถ้ามีข้อมูล
                If tDay(i, 0) <> lastDay Then ' ถ้าวันที่นั้นไปใช่วันที่สุดท้ายในมิตินั้น แสดงว่าต้องมีวันที่ 2 ช่วง
                    strDay = strDay & vbCrLf & "และ " & tDay(i, 0) & " - วันที่ " & lastDay 'บรรทัดต่อๆไปจะแสดงขึ้นต้นด้วยคำว่า และ
                Else
                    strDay = strDay & vbCrLf & "และ " & tDay(i, 0) ' ถ้าวันที่นั้นเท่ากับวันที่สุดท้ายในมิตินั้นด้วย แสดงว่าจะมีวันที่แค่วันเดียว
                End If
            End If
        End If
    Next i
    '---------------------------------------------------------------------------------------------------
    strDay = strDay & vbCrLf & "ให้ไว้ ณ วันที่ " & endDay 'เก็บข้อมูลในรูปแบบที่เราต้องการในตัวแปร strDay
    Seminar = strDay
End Function

การใช้งาน: Seminar(วันที่เริ่มต้น, วันที่สิ้นสุด)
Seminar(#3/1/2024#, #3/15/2024#)
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

4
ก็ลองทำเป็นตัวอย่างออกมาให้แกะตัวอย่างโค๊ต และนำไปประยุกต์ต่อนะครับ
ส่วนหนึ่ง ต้องลองฝึกแกะโค๊ตด้วยครับ จะได้เข้าใจหลักการ ไม่กล้าก็ไม่เกิดครับ

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

5
ถ้า Save เป็น mdb ไฟล์ไมไ่ด้ผมก็คงช่วยไม่ได้
คงต้องรบกวน กูรูท่านอื่นครับผม
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

6
รบกวน Save as ไฟล์ตัวอย่างเป็น Accdb --> MDB ไฟล์ แล้ว Upload เข้ามาให้ด้วยครับ
พอดีผมใช้ access 2002

ข้างใน Zip ไฟล์ที่ส่งมายังเป็น Accdb อยู่ครับ ขอเป็น mdb ไฟล์ครับ

แต่เท่าที่อ่านดู ใจความสำคัญคือ นับวันอบรม ไม่นับวันอาทิตย์ Weekday()
โดยฟังค์ชั่นนี้ จะนับวันอาทิตย์ = 1 เรื่อยไป เสาร์ = 7

เราก็สามารถใช้ประโยช์จากตรงนี้มาประยุกต์ใช้งานได้ครับผม
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

7
ใช้ DAO ร่วมกับคำสั่ง Do While

Do while not rst1.EOF
   เงื่อนไขที่ 1

   เงื่อนไขที่ 2

   เงื่อนไขที่ 3

  rst1.movenext
Loop
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

8
SELECT Sono
FROM ชื่อตาราง
GROUP BY Sono,EmpCode
HAVING Sono Like "SS*" AND EMPCode = รหัสพนักงาน;
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

9
SELECT Sono,EmpCode
FROM ชื่อตาราง
GROUP BY Sono,EmpCode
HAVING Sono Like "SS*";
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

11
งั้นก็ใช้คิวรีครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

12
ในคิวรี่ มุมอง SQL ลองใส่คำสั่งนี้ครับ

SELECT Right(ฟิวส์ที่จะตัด0ออก,5) AS ExtractString
FROM ชื่อตาราง;
-----------------------------

หรือเพิ่มฟิวส์ในคิวรี่ใช้คำสั่งนี้ได้ครับ

รหัสพนักงาน: Right([ฟิวส์ที่จะตัด0],5)
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

13
เปลี่ยนจากเครื่องหมาย + เป็น & ก็ได้เลยครับ
Addressall: [Table1].[Address1] & ' ' & [Table1].[Address2] & ' ' & [Table1].[Address3] & ' ' & [Table1].[Address4] & ' ' & [Table1].[Address5] & ' ' & [Table1].[Zipcode]


แต่แนะนำให้ใช้แบบนี้ครับ

ข้อดีคือ ระยะการเว้นวรรคข้อความจะสม่ำเสมอ ในกรณีที่บางฟิลล์ไม่มีข้อมูล
โดยการใช้ IIF มาเช็คเงือนไขในแต่ละฟิลล์ และใช้ Trim มาช่วยในการปรับปรุงการเว้นวรรค

โค๊ด: [Select]
Addressall: Trim(IIf(IsNull([address1]),"",[address1]) & IIf(IsNull([address2]),""," " & [address2]) & IIf(IsNull([address3]),""," " & [address3]) & IIf(IsNull([address4]),""," " & [address4]) & IIf(IsNull([address5]),""," " & [address5]) & IIf(IsNull([zipcode]),""," " & [zipcode]))
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

14
ผมไม่แน่ใจเหมือนกันครับ ถ้าตารางใหม่ addnew ได้ปกติ
ข้อสันนิษฐาน
   1.การกำหนดประเภทของข้อมูลว่าเหมือนกันหรือไม่(ดูจากตารางใหม่ที่เพิ่งสร้างและเพิ่มได้)
      เพราะบางครั้งเกิดปัญหาการแปลงชนิดข้อมูลไม่ถูกต้องทำให้ไม่สามารถเพิ่มใหม่ได้
   2.ข้อมูลมี primary key แล้วหรือไม่
   3.เช็คการกำหนดค่าซ้ำ(ดูจากตัวที่เพิ่มได้ก็ได้ครัข)

รอน้าๆ ผู้ที่ใช้งาน SQL SERVER โดยตรงมาแชร์ประสบการณ์ตรงส่วนนี้
  :yuush:
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

15
โค๊ด Addnew
โค๊ด: [Select]
AddnewSQL = "INSERT INTO dbo_TestTP ( CardID, TPNo, TPIssueDate, TPExpireDate ) " _
& "SELECT dbo_TempImportTP.CardID, dbo_TempImportTP.TPNo, dbo_TempImportTP.TPIssueDate, dbo_TempImportTP.TPExpireDate " _
& "FROM dbo_TempImportTP WHERE (((dbo_TempImportTP.CardID) Not In (select CardID from [dbo_TestTP])));"

โค๊ด Update
โค๊ด: [Select]
UpdateSQL = "UPDATE dbo_TestTP INNER JOIN dbo_TempImportTP ON dbo_TestTP.CardID = " _
& "dbo_TempImportTP.CardID SET dbo_TestTP.TPNo = [dbo_TempImportTP].[TPNo], dbo_TestTP.TPIssueDate = " _
& "[dbo_TempImportTP].[TPIssueDate], dbo_TestTP.TPExpireDate = [dbo_TempImportTP].[TPExpireDate] " _
& "WHERE (((dbo_TestTP.TPNo)<>[dbo_TempImportTP].[TPNo]) AND ((dbo_TestTP.CardID)=[dbo_TempImportTP].[CardID])) " _
& "OR (((dbo_TestTP.TPIssueDate)<>[dbo_TempImportTP].[TPIssueDate])) OR (((dbo_TestTP.TPExpireDate)<>[dbo_TempImportTP].[TPExpireDate]));"

ปรับเป็นแบบนี้นะครับ เราจะไม่ใช้ And เราจะใช้ OR นะครับ
เช็คฟิลล์ TP7No เพื่อความถูกต้องนะครับว่าที่ถูกต้องคือ TP7No  หรือ TPNo
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

16
อ้างถึง
ชื่อนี้ค่ะ dbo_TempImport
เป็น Database ที่ลิงค์มาจาก SQL Server
หรือจะติดตรงนี้ค่ะ acSpreadsheetTypeExcel8 ต้องไปสร้างหรือกำหนด SpreadsheetType ที่ไหนคะ

ตาราง temp สร้างไว้ที่ front end ได้เลย ไว้วางข้อมูลชั่วคราวเท่านั้น
ไม่ต้องลิ้งมา

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

17
Deletesql = "DELETE * FROM TempImport;"
ตารางชั่วคราวชื่ออะไรครับ
ตรงสีแดงใส่ชื่อตารางชั่วคราว
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

18
ตรง Tool >> Reference
เพิ่มตัว MS OFFICE XX Object libary ด้วยครับ ตามภาพ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

หน้า: [1] 2 3 4 ... 6