แสดงกระทู้

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

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

ใช้การสร้าง HeadGroup นะครับ
ใช้การตัดสระโดย Replace()

โค้ด
SELECT Table1.CustomerName, Left(Replace(Replace(Replace(Replace(Replace([CustomerName],"เ",""),"แ",""),"ไ",""),"ใ",""),"โ",""),1) AS GroupString, *
FROM Table1
ORDER BY Left(Replace(Replace(Replace(Replace(Replace([CustomerName],"เ",""),"แ",""),"ไ",""),"ใ",""),"โ",""),1);

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




ลองดูตัวอย่างครับ


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

2
ห้อง MS Access / : ความเข้าใจ .Tag code vb access
« เมื่อ: 17 ก.ย. 63 , 11:13:59 »
.Tag ในกรณีของผมเอามาใช้ในการจัดกลุ่มโดยในหน้า Property -> Ohter จะมีให้ใส่ Tag อยู่
ตัวอย่างผมมี combo box อยู่หลายตัวแต่เมื่อใช้คำสั่งนี้อยากให้มีผลเฉพาะตัวที่กำหนด Tag "B1" ใว้เท่านั้น

อ้างถึง
Private Sub CleanAllFieldsButton_Click()
Dim ctl As Control
    For Each ctl In Me.Controls
    Select Case ctl.ControlType

    Case acComboBox And ctl.Tag = "B1"
           ctl.Value = Null

    End Select
   Next

    Set ctl = Nothing
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

3
ห้อง MS Access / : ความเข้าใจ .Tag code vb access
« เมื่อ: 17 ก.ย. 63 , 00:06:50 »
.Tag property คือพื้นที่ว่างๆในคอนโทรลต่างๆที่ให้เราใส่ค่าอะไรลงไปก็ได้ เปรียบเหมือนตัวแปรนึง ไม่มีผลต่อการทำงานหรือคุณสมบัติใดๆต่อตัวคอนโทรลนั้นๆ ความหมายของค่าก็แล้วแต่เราจะกำหนดเอาเอง ในงานที่ผมเคยใช้ ก็เช่นตอนก่อนจะบันทึก ผมก็จะวิ่งอ่านแต่ละคอนโทรลดูว่า .Tag ไหนมีข้อความบ้าง ถ้ามี แต่ผู้ใช้ไม่ได้เป้อนค่าลงคอนโทรลนั้น ก็จะเอาข้อความใน .Tag ไปแสดงเป็นข้อความเตือนให้ผู้ใช้รับรู้ว่าข้อมูลที่ขาดหายไปมีอะไรบ้าง ผมก็จะได้ไม่ต้องมาเขียนโค้ดเช็คทีละคอนโทรล ซึ่งแต่ละฟอร์มก็มีคอนโทรลที่แตกต่างกัน ผมก็จะสามารถเขียนโค้ดเป็น Public Function ที่ทำการเช็คเอาไว้แค่ที่เดียว โค้ดเดียว ก็พอ เช่น ในเท็กซ์บ็อกซ์ Customer Name ผมก็ใส่คำว่า "ชื่อลูกค้า", ในเท็กซ์บ็อกซ์ Purchase Order ก็ใส่คำว่า "เลขที่ใบสั่งซื้อ" เป็นต้น

ส่วนในบรรทัดแรกนั้น เป็นการเช็คว่าถ้า .Tag ไม่มีค่า , แต่จริงๆไม่มีความจำเป็นต้อง & กับ "" เพียงเขียนว่า if txtID.Tag = "" then ก็พอแล้ว
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

4
Map Google Drive in Windows (ตัวอย่างเขาเพิ่มเป็นไดรฟ์ I)

หมายเหตุ ทุกเครื่องที่ลงโปรแกรมแล้วเชื่อมต่อจะเห็นข้อมูลใน Google Drive เหมือนทำ map network drive

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

5
กำหนด Format ครับ
" รายการนำเข้า จำนวน"& Format([txtจำนวนเงิน], "Standard") &" บาท"

โค๊ด: [Select]
Format (210.6, "#,##0.00")
Result: '210.60'

Format (210.6, "Standard")
Result: '210.60'

Format (0.981, "Percent")
Result: '98.10%'

Format (1267.5, "Currency")
Result: '$1,267.50'
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

6
เพราะไม่ได้บอกอะไรมาเลย ก็เดานะครับว่า 3 ตำแหน่งที่เป็นสีแดง อาจเป็นจุดที่ทำให้ผิดพลาดได้ นอกจากนี้ ก็เช็คด้วยว่าค่าใน tblKeyword ถูกต้องหรือไม่

                If Len(cc) > 0 Then
                    MST.Open "tblKeyword", CON, adOpenStatic, adLockReadOnly
                ' Do Until MST.EOF <---- Comment ก็ทำให้ไม่วนลูปสิครับ !!
                 '  Debug.Print MST!keyword
                        If cc = MST!Keyword Then <---- เช็คดีๆว่า เปรียบค่าของ cc กับ MST!Keyword ใช่สิ่งที่ต้องการหรือไม่
                 '  MsgBox MST!Category & " --- " & MST!Value
                            TRN.Update MST!Category, MST!Value <---- แน่ใจหรือไม่ว่าอัพเดตด้วย MST!Value
                            ' Debug.Print MST!Category
                        End If
                        MST.MoveNext
                ' Loop
                    MST.Close
                End If
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

7
ห้อง MS Access / : รวมฟิวส์ Text
« เมื่อ: 02 ก.ย. 63 , 12:15:17 »
ขอบคุณมากๆเลยครับ แต่ตอนนี้ถ้าเกิด text1 เราไม่ต้องการกรอกข้อมูล แต่ตอนรวม มันจะมีค่าเว้นวรรคมาด้วย ถ้าเราไม่ต้องการทำยังไงครับ
ใช้ Trim เข้ามาช่วยครับ


Option Compare Database
Public strText1, strText2, strText3 As Variant

Private Sub Text1_Change()
If Len(Me.Text1.Text) > 0 Then
strText1 = Me.Text1.Text
Else
strText1 = Null
End If
OutPutString
End Sub

Private Sub Text2_Change()
If Len(Me.Text2.Text) > 0 Then
strText2 = Me.Text2.Text
Else
strText2 = Null
End If
OutPutString
End Sub

Private Sub Text3_Change()
If Len(Me.Text3.Text) > 0 Then
strText3 = Me.Text3.Text
Else
strText3 = Null
End If
OutPutString
End Sub

Private Sub OutPutString()
Me.total = Trim(strText1 & IIf(IsNull(strText2), Null, " " & strText2) & IIf(IsNull(strText3), Null, " " & strText3))
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

8
จากอันเก่าปรับโค้ดเป็นแบบนี้นะครับ ไม่ต้องสร้างตารางใหม่
เอาตาราง Temp ออกไปได้เลย

โค๊ด: [Select]
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strWong_Code As String
Dim strMember_Code As String
Dim SQL As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("TB2", dbOpenDynaset)
If Not rst.BOF And Not rst.EOF Then
  rst.MoveFirst
  strWong_Code = rst![วง]
  strMember_Code = rst![สมาชิก]
  rst.MoveNext
 
  Do Until rst.EOF
    If strWong_Code = rst![วง] Then
      strMember_Code = strMember_Code & "," & rst![สมาชิก]
    Else
DoCmd.SetWarnings False
   SQL = "UPDATE TB1 " & _
        "SET samachik= '" & strMember_Code & "'" & _
        "WHERE [รหัส] = '" & strWong_Code & "'"
    DoCmd.RunSQL SQL
      strWong_Code = rst![วง]
      strMember_Code = rst![สมาชิก]
    End If
    rst.MoveNext
  Loop 

DoCmd.SetWarnings False
   SQL = "UPDATE TB1 " & _
        "SET samachik= '" & strMember_Code & "'" & _
        "WHERE [รหัส] = '" & strWong_Code & "'"
    DoCmd.RunSQL SQL
    DoCmd.SetWarnings True
End If
rst.Close
Set rst = Nothing
db.Close
Set db = Nothing
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

9
Shell """c:\program files\7-zip\7z.exe"" a """ & PathString & "\" & "Work.zip" & """ """ & PathString  & "\" & "Work.mdb" & """ "
กรณีข้อความใน PathString มีเครื่องหมาย \ ปิดท้ายอยู่แล้ว ก็ให้เปลี่ยน & "\" & ทั้ง 2 ตำแหน่งเป็น & ก็พอครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

10
เสริมหน่อยนะครับ คือ Unix Timestamp ในการแปลง เวลาจะเป็นมาตรฐาน GMT ซึ่งหากต้องการให้แสดงเป็นเวลาไทยต้อง GMT+7:00 ขึ้นอยู่กับว่าข้อมูลบันทึกมาจากไหนถ้าบันทึกเวลาเป็นไทยอยู่แล้วก็ไม่ต้องแปลง แต่ส่วนใหญเวลาเขาแปลงแสดงในสาธารณะเขาจะใช้ GMT ถ้าอย่างนั้น หากเราอยากจะรู้ว่าเป็นเวลาไทยเท่าไหร่ก็ต้องบวกอีก 7 ชั่วโมงด้วยนะครับ ไม่งั้นเวลาจะไม่ตรง ต้องตรวจสอบความถูกต้องของข้อมูลด้วยนะครับ
https://www.epochconverter.com/ link
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

11
ลองดูครับแบบนี้ไหม


วิธีการคือสร้าง textbox แล้วตั้งค่าตามภาพครับ

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

12
ผมใช้วิธีสร้าง Public Array Variable X ในโมดูล M เพื่อเก็บสถานะการเลือกเมื่อเปิดฟอร์ม F โดย X จะถูกกำหนดให้มีจำนวน element ทั้งหมดเท่ากับค่าสูงสุดของ ID  แล้วเชื่อม check box (chkX) ที่ใช้แสดงสถานะการเลือกเข้ากับฟังก์ชั่น XStatus( ) ที่อ่านค่าจาก X อีกทีนึง

แต่เนื่องจาก check box นี้ผูกกับฟังก์ชั่น จึงทำได้แค่แสดง ไม่สามารถคลิกเปลี่ยนแปลงได้ จึงสร้าง combo box command button (btnX) เพื่อรองรับการคลิกเลือกเปลี่ยนสถานะแทน โดยกำหนดให้แสดงเป็นประเภทโปร่งใส (Transparent property = True) และวางขี่อยู่บน chkX เพื่อให้ผู้ใช้รู้สึกเหมือนใช้งาน chkX เท่านั้น  เมื่อคลิกก็จะไปสลับค่าในตัวแปร X ตาม element ที่อ้างอิงด้วยค่า ID และอัพเดตการแสดงของ chkX อีกที  และเมื่อจะนำการเลือกไปใช้ เช่นนำไปออกรายงาน ก็ให้กำหนดเงื่อนไขของคิวรี่หรือ Filter ของรายงานให้มีเงื่อนไข Xstatus(ID) = TRUE

ข้อดีคือ
- ไม่ต้องสร้างฟิลด์หรือเทเบิลชั่วคราวเพื่อเก็บสถานะการเลือก

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

13
ห้อง MS Access / : ส่ง line notify ไม่ได้ครับ
« เมื่อ: 29 พ.ค. 63 , 17:58:47 »
ขอถามต่อนะครับ เมื่อข้อความถูกส่งแล้วจะมี message ตามรูปแสดงขึ้นมา ถ้าไม่ต้องการให้messageแสดงขึ้นมาต้องเขียน code เพิ่มอย่างไรครับ ขอบคุณครับ


Sub SendMessageToLineNotify()

Dim myurl As String, iMessage As String, postDATA As String, winHttpReq As Object
iMessage = Me.TxtMessage
Set winHttpReq = CreateObject("Microsoft.XMLHTTP")
myurl = "https://notify-api.line.me/api/notify link"

postDATA = "message= " & iMessage
winHttpReq.Open "POST", myurl, False
winHttpReq.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
winHttpReq.SetRequestHeader "Authorization", "Bearer " & Me.TxtToken
winHttpReq.Send (postDATA)
MsgBox winHttpReq.responsetext

End Sub

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

14
สามารถใช้ Tab Control เพื่อใช้เป็นคอนเทนเนอร์บรรจุคอนโทรลอื่นๆรวมทั้งซับฟอร์มคอนโทรลได้อีกชั้นนึง   Tab Control ตัวนึงสามารถมีได้หลาย Page อย่างในรูป ตย.ข้างล่าง ก็มี Page "รายการขาย" และ "ลงบัญชี"
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

15
จริงๆ แล้วไม่ต้องใช้ VBA ครับ แค่ออกแบบตารางให้เหมาะสมแล้วใช้คิวรีแบบตัวอย่างนี้ครับ

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

16
ได้ข้อมูลมาจากเฟสบุ๊กเพจ "โปรแกรมเมอร์ไทย Thai programmer" ครับ

https://goalkicker.com/?fbclid=IwAR1TjcRyaWd6r_xdj510qNJOu_3B2c9EV_AWjkJ0_lyZqxdBS3bYFHCZERo link

แนะนำเพิ่มเติมว่า สำหรับคนที่ชอบเขียนโปรแกรม ให้ศึกษาวิชา Data Structure (ส่วนนึงอยู่ในหนังสือ Algorithms) และ Algorithms เพราะจะช่วยให้ขยับโลกทัศน์ในการวิเคราะห์และหาวิธีตอบโจทย์ที่ซับซ้อนยิ่งขึ้นได้
โพสต์นี้ได้รับคำขอบคุณจาก: sjs

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