Page 1 of 1

เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 19, 2021 11:20 am
by Jetnipit
สวัสดีครับผมเป็นสมาชิกใหม่และมือใหม่ รบกวนขอฝากตัวด้วยครับ :D

ตอนนี้ทำ Line notify ได้แล้วครับ โดยการทำงานคือ ใครบ้างที่มี คำว่า Expire ใน Fields ที่ชื่อขึ้นต้นด้วยตัว S แล้วให้แจ้งเตือน Line notify ตอนนี้ทำให้ขึ้นแจ้งเตือนตามจำนวนคำที่โชว์ได้แล้วครับ

ปัญหาคือไม่ผมไม่ทราบว่าจะเขียน Code ยังไงให้ Line เตือนพร้อมกับบอกไปด้วยว่าใคร และ Fields ไหนตามภาพใน Out put ครับ

รบกวนอาจารย์หรือผู้รู้ชี้ทางทีครับ

Code: Select all

rivate Sub Form_Load()
Dim rsLive As Recordset
Dim fld As Field
Dim Db As Database
Dim oXML As Object
Dim strToken As String
Dim strMessage As String
Dim strDate As String
Dim URL As String

Set Db = CurrentDb()
Set rsLive = Db.OpenRecordset("Query1")

While Not rsLive.EOF
    For Each fld In rsLive.Fields
        If fld.Name Like "S*" Then
               If fld & "" = "Expire" Then

'Line Notify Token
strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"

URL = "https://notify-api.line.me/api/notify"


strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")


'Line Message
strMessage = "message=MS Access "

'Ajax
Set oXML = CreateObject("Microsoft.XMLHTTP")
With oXML
'Line Post
.Open "POST", URL, 0

'Header
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.SetRequestHeader "Authorization", "Bearer " & strToken

'Ajax
.send (strMessage)

'Line Check Print
Debug.Print oXML.responseText
End With

'Line
Set oXML = Nothing
                        
                        
                        
               End If
           End If
    Next
    rsLive.MoveNext
Wend

rsLive.Close
Set rsLive = Nothing
Db.Close
Set Db = Nothing
End Sub

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 19, 2021 1:57 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
Dim strUser as String

Set Db = CurrentDb()
Set rsLive = Db.OpenRecordset("Query1")

While Not rsLive.EOF
    For Each fld In rsLive.Fields
        if fld.Name = "Name" Then
            strUser = fld.Value
        end if
        If fld.Name Like "S*" Then
            If fld & "" = "Expire" Then
                'Line Notify Token
                strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                URL = "https://notify-api.line.me/api/notify"
                strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")

                'Line Message
                strMessage = "message=MS Access " & strUser
'Other code

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 19, 2021 3:02 pm
by Jetnipit1
ขอบคุณครับผม นำไปประยุกต์ใช้ ได้ตามที่ต้องการเลยครับ

ผมรบกวนสอบถามอีกเรื่องครับ ผมทำ Elseif จับในกรณีที่ ไม่มีคำว่า Expire เลย โดยการส้ราง ตัวแปร Count มา และ Set ค่าเป็น "A" ก่อนเข้า For each และตรง Elseif count = "A" then ให้ส่งข้อความว่า No Expire และ Set count = "B" เพื่อกันการส่งซ้ำ และในท้ายสุดของ If ผมใส่ count = "C" ไว้

พอ Out put ออกมา ในกรณีที่ต้องการให้ตก If อย่างเดียว แต่มันกลับมี Elseif มาครั้งนึงทุกรอบที่ส่ง Out put เลยครับ ไม่ทราบว่าผมเข้าใจอะไรผิดหรือเปล่าครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 19, 2021 3:30 pm
by snasui
:D คุณลงทะเบียนด้วยชื่อที่มีไม้เอกนำหน้า ผมลบไม้เอกทิ้งให้แล้วทั้งสองชื่อ

ในการ login ครั้งใหม่กรุณาคีย์ชื่อเอง ไม่ควรใช้ค่าที่ Browser จำไว้เพราะจะ login เข้าไม่ได้ครับ

ในการสอบถามปัญหาที่เป็น Code กรุณาแสดง Code นั้นในช่อง Comment นี้ด้วยจะได้สะดวกในการตรวจสอบของเพื่อนสมาชิกครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 19, 2021 3:43 pm
by Jetnipit
ขอบคุณที่แก้ให้ครับผม ผมนึกว่าเป็น *

อันนี้โค้ด อาจจะอ่านยากนิดหน่อย ไม่มีพื้นฐานเรื่องการเรียง Code เลยครับ

Code: Select all

Private Sub Form_Load()
Dim rsLive As Recordset
Dim fld As Field
Dim Name As String
Dim Db As Database
Dim oXML As Object
Dim strToken As String
Dim strMessage As String
Dim strDate As String
Dim URL As String
Dim Site As String
Dim count As String
Dim strUser As String
Set Db = CurrentDb()
Set rsLive = Db.OpenRecordset("Query1")

count = "a"

While Not rsLive.EOF
    For Each fld In rsLive.Fields
        If fld.Name = "Name" Then
            strUser = fld.Value
        End If
        If fld.Name Like "S*" Then
            If fld & "" = "Expire" Then
            Site = fld.Name
            
                'Line Notify Token
                strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                URL = "https://notify-api.line.me/api/notify"
                strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")

                'Line Message
                strMessage = "message=" & vbNewLine & "Name : " & strUser & vbNewLine & "Site : " & Site & vbNewLine & "Company : PTT "

                'Ajax
                Set oXML = CreateObject("Microsoft.XMLHTTP")
                With oXML
                'Line Post
                .Open "POST", URL, 0

                'Header
                .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                .SetRequestHeader "Authorization", "Bearer " & strToken

                'Ajax
                .send (strMessage)

                'Line Check Print
                Debug.Print oXML.responseText
                End With

                'Line
                Set oXML = Nothing
                count = c


                        
            ElseIf count = "a" Then
            count = "b"



                'Line Notify Token
                strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                URL = "https://notify-api.line.me/api/notify"
                strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")


                'Line Message
                strMessage = "message= No Expire"

                'Ajax
                Set oXML = CreateObject("Microsoft.XMLHTTP")
                With oXML
                'Line Post
                .Open "POST", URL, 0

                'Header
                .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                .SetRequestHeader "Authorization", "Bearer " & strToken

                'Ajax
                .send (strMessage)

                'Line Check Print
                Debug.Print oXML.responseText
                End With

                'Line
                Set oXML = Nothing
               End If
           End If
    Next
    rsLive.MoveNext
Wend

rsLive.Close
Set rsLive = Nothing
Db.Close
Set Db = Nothing
End Sub

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 19, 2021 4:16 pm
by snasui
Jetnipit1 wrote: Fri Nov 19, 2021 3:02 pm ผมทำ Elseif จับในกรณีที่ ไม่มีคำว่า Expire เลย
:D ค่อย ๆ ถามตอบกันไปครับ

การที่จะทราบได้ว่าไม่มีคำว่า Expire เลยตามที่แจ้งมานั้น ต้อง Loop ไปครบทุก Field ใน Record นั้นใช่หรือไม่ หากไม่ใช่ควรเขียนให้เช็คที่ Field นั้น ๆ โดยตรง จะได้ลดการ Loop เพราะรู้ชัดเจนอยู่แล้วว่าให้ตรวจสอบที่ Field ไหน

ถ้าหากต้อง Loop ให้ครบทุก Field ใน Record นั้นก่อน จะต้องมีตัวนับในการ Loop ไปแต่ละครั้ง เมื่อเจอคำว่า "Expire" ให้ทำการบวกตัวนับไปครั้งละ 1 และก่อนจะเข้า Record ลำดับถัดไปด้วย rsLive.MoveNext ให้ตรวจสอบตัวนับว่ามีค่า > 0 หรือไม่ ถ้าใช่แสดงว่าเจอคำว่า Expire จึงค่อยสั่งให้ทำงานตามที่ต้องการ จากนั้นถึงจะ rsLive.MoveNext เช่นนี้เป็นต้น

สำหรับ Field ใน RecordSet ลำดับคอลัมน์แรกคือ Fileds(0) หากต้องการตรวจสอบค่าใน Field แรก (คอลัมน์แรก) ว่ามีคำว่า "Expire" หรือไม่ หากมีให้เพิ่มค่าตัวแปร count ครั้งละ 1 สามารถใช้ Statement เป็น

if rsLive.Fields(0).value = "Expire" then count = count + 1

ซึ่งจะลดการ Loop ทุก Field ใน Record ด้วย For...Next ลงไปได้ครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Fri Nov 26, 2021 1:25 pm
by Jetnipit
ขอบคุณสำหรับแนวทางครับ ได้แล้วครับตอนนี้ :D :D :D

Code: Select all

Private Sub Form_Load()
Dim rsLive As Recordset
Dim fld As Field
Dim Name As String
Dim Db As Database
Dim oXML As Object
Dim strToken As String
Dim strMessage As String
Dim strDate As String
Dim URL As String
Dim Site As String
Dim count As Integer
Dim strUser As String
Set Db = CurrentDb()
Set rsLive = Db.OpenRecordset("Query1")
count = 0


While Not rsLive.EOF
    For Each fld In rsLive.Fields
        If fld.Name = "Name" Then
            strUser = fld.Value
            End If
                If fld.Name Like "S*" Then
                    If fld & "" = "Expire" Then
                    Site = fld.Name
                    count = count + 1
                            
                            
                                                    If count > 0 Then
                                    
                                                                    'Line Notify Token
                                                                    strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                                                                    URL = "https://notify-api.line.me/api/notify"
                                                                    strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")
                                                    
                                                                    'Line Message
                                                                    strMessage = "message=" & vbNewLine & "Name : " & strUser & vbNewLine & "Site : " & Site & vbNewLine & "Company : PTT "
                                                    
                                                                    'Ajax
                                                                    Set oXML = CreateObject("Microsoft.XMLHTTP")
                                                                    With oXML
                                                                    'Line Post
                                                                    .Open "POST", URL, 0
                                                    
                                                                    'Header
                                                                    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                                                                    .SetRequestHeader "Authorization", "Bearer " & strToken
                                                                    
                                                                    'Ajax
                                                                    .send (strMessage)
                                                                    
                                                                    'Line Check Print
                                                                    Debug.Print oXML.responseText
                                                                    End With
                                                                    
                                                                    'Line
                                                                    Set oXML = Nothing
                                                                    
                                                                    End If
                                                                    
                                            
                     End If
                 End If
    Next
    rsLive.MoveNext
Wend

rsLive.Close
Set rsLive = Nothing
Db.Close
Set Db = Nothing

        If count = 0 Then
                                
                'Line Notify Token
                 strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                                       
                 URL = "https://notify-api.line.me/api/notify"
                                       
                                       
                 strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")
                                        
                                        
                'Line Message
                strMessage = "message= No Expire"
                
                'Ajax
                Set oXML = CreateObject("Microsoft.XMLHTTP")
                With oXML
                'Line Post
                .Open "POST", URL, 0
                
                'Header
                .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                .SetRequestHeader "Authorization", "Bearer " & strToken
                
                'Ajax
                .send (strMessage)
                
                'Line Check Print
                Debug.Print oXML.responseText
                End With
                
                'Line
                 Set oXML = Nothing
        End If

'Me.Text13 = " & count & "
End Sub

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Tue Nov 30, 2021 9:52 am
by Jetnipit
ขอสอบถามเพิ่มเติมครับ ผมต้องการให้ Line แสดงวันที่หมดอายุ (ฟิลด์ที่ลงท้ายด้วยตัว E) ของคนนั้นๆด้วยในหัวข้อ EXP ครับ
เบื้องต้นลองใช้โค้ดแบบ Name เหมือนข้อมูลไม่เข้าครับ ไม่ทราบว่าปัญหาอยู่ที่อะไรหรอครับ

Code: Select all

While Not rsLive.EOF
    For Each fld In rsLive.Fields
        If fld.Name = "Name" Then
            strUser = fld.Value
            End If
            If fld.Name = "*E" Then
                strExpireDate = fld.Value
                    End If
                If fld.Name Like "S*" Then
                    If fld & "" = "Expire" Then
                    Site = fld.Name
                    count = count + 1
                            
                            
                                                    If count > 0 Then
                                    
                                                                    'Line Notify Token
                                                                    strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                                                                    URL = "https://notify-api.line.me/api/notify"


Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Tue Nov 30, 2021 7:56 pm
by snasui
Jetnipit wrote: Tue Nov 30, 2021 9:52 am ผมต้องการให้ Line แสดงวันที่หมดอายุ (ฟิลด์ที่ลงท้ายด้วยตัว E) ของคนนั้นๆด้วยในหัวข้อ EXP ครับ
เบื้องต้นลองใช้โค้ดแบบ Name เหมือนข้อมูลไม่เข้าครับ ไม่ทราบว่าปัญหาอยู่ที่อะไรหรอครับ
:D โพสต์ Code ทั้งหมดหลังจากปรับมาแล้วด้วยจะได้ช่วยทดสอบให้ได้ครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Wed Dec 01, 2021 7:46 am
by Jetnipit

Code: Select all

Dim rsLive As Recordset
Dim fld As Field
Dim Name As String
Dim Db As Database
Dim oXML As Object
Dim strToken As String
Dim strMessage As String
Dim strDate As String
Dim URL As String
Dim Site As String
Dim count As Integer
Dim strUser As String
Dim strExpireDate As String
Set Db = CurrentDb()
Set rsLive = Db.OpenRecordset("Query1")
count = 0


While Not rsLive.EOF
    For Each fld In rsLive.Fields
        If fld.Name = "Name" Then
            strUser = fld.Value
            End If
            If fld.Name = "*E" Then
                strExpireDate = fld.Value
                    End If
                If fld.Name Like "S*" Then
                    If fld & "" = "Expire" Then
                    Site = fld.Name
                    count = count + 1
                            
                            
                                                    If count > 0 Then
                                    
                                                                    'Line Notify Token
                                                                    strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                                                                    URL = "https://notify-api.line.me/api/notify"
                                                                    strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")
                                                    
                                                                    'Line Message
                                                                    strMessage = "message=*Expired*" & vbNewLine & "Name : " & strUser & vbNewLine & "EXP : " & strExpireDate & vbNewLine & "Site : " & Site & vbNewLine & "Company : PTT "
                                                    
                                                                    'Ajax
                                                                    Set oXML = CreateObject("Microsoft.XMLHTTP")
                                                                    With oXML
                                                                    'Line Post
                                                                    .Open "POST", URL, 0
                                                    
                                                                    'Header
                                                                    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                                                                    .SetRequestHeader "Authorization", "Bearer " & strToken
                                                                    
                                                                    'Ajax
                                                                    .send (strMessage)
                                                                    
                                                                    'Line Check Print
                                                                    Debug.Print oXML.responseText
                                                                    End With
                                                                    
                                                                    'Line
                                                                    Set oXML = Nothing
                                                                    
                                                                    End If
                                    
                    ElseIf fld & "" = "Close" Then
                    Site = fld.Name
                    count = count + 1
                            
                            
                                                    If count > 0 Then
                                    
                                                                    'Line Notify Token
                                                                    strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                                                                    URL = "https://notify-api.line.me/api/notify"
                                                                    strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")
                                                    
                                                                    'Line Message
                                                                    strMessage = "message=*Close*" & vbNewLine & "Name : " & strUser & vbNewLine & "EXP : " & strExpireDate & vbNewLine & "Site : " & Site & vbNewLine & "Company : PTT "
                                                    
                                                                    'Ajax
                                                                    Set oXML = CreateObject("Microsoft.XMLHTTP")
                                                                    With oXML
                                                                    'Line Post
                                                                    .Open "POST", URL, 0
                                                    
                                                                    'Header
                                                                    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                                                                    .SetRequestHeader "Authorization", "Bearer " & strToken
                                                                    
                                                                    'Ajax
                                                                    .send (strMessage)
                                                                    
                                                                    'Line Check Print
                                                                    Debug.Print oXML.responseText
                                                                    End With
                                                                    
                                                                    'Line
                                                                    Set oXML = Nothing
                                                                    
                                                                    End If
                                    
                                    
                    
                                            
                     End If
                 End If
    Next
    rsLive.MoveNext
Wend

rsLive.Close
Set rsLive = Nothing
Db.Close
Set Db = Nothing

        If count = 0 Then
                                
                'Line Notify Token
                 strToken = "ZrbMsogrStOtPH5RGH46CORbjWldrut9A8ahOuE3Vf2"
                                       
                 URL = "https://notify-api.line.me/api/notify"
                                       
                                       
                 strDate = Format(Now, "DD/MM/YYYY - HH:MM:SS")
                                        
                                        
                'Line Message
                strMessage = "message= No Expire"
                
                'Ajax
                Set oXML = CreateObject("Microsoft.XMLHTTP")
                With oXML
                'Line Post
                .Open "POST", URL, 0
                
                'Header
                .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                .SetRequestHeader "Authorization", "Bearer " & strToken
                
                'Ajax
                .send (strMessage)
                
                'Line Check Print
                Debug.Print oXML.responseText
                End With
                
                'Line
                 Set oXML = Nothing
        End If

'Me.Text13 = " & count & "
End Sub

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Thu Dec 02, 2021 9:59 am
by snasui
Jetnipit wrote: Tue Nov 30, 2021 9:52 am ต้องการให้ Line แสดงวันที่หมดอายุ (ฟิลด์ที่ลงท้ายด้วยตัว E)
:D ตัวอย่างการดักจับ Field ที่ลงท้ายด้วย E ครับ

Code: Select all

'Other code
For Each fld In rsLive.Fields
'Other code
    If Right(fld.Name,1) = "E" Then
        strExpireDate = fld.Value
    End If
'Other code

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Thu Dec 02, 2021 11:05 am
by Jetnipit
ตัวแปร strExpireDate มันออกคำว่า Expire แทนอะครับ แทนที่จะออกเป็นวันที่ครับ
เหมือนมันเก็บ Value ฟิลด์ข้างขวาของฟิลด์ที่ลงท้ายด้วย E แทนครับ

โค้ดแสดงข้อความครับ

Code: Select all

    'Line Message
strMessage = "message=*Expired*" & vbNewLine & "Name : " & strUser & vbNewLine & "EXP : " & strExpireDate & vbNewLine & "Site : " & Site & vbNewLine & "Company : PTT "

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Thu Dec 02, 2021 11:11 am
by snasui
:D ก็ต้องหาชื่อ Field ที่มันตรงกับ Expire มันอาจจะมี Filed ที่ลงท้ายด้วย E หลาย Filed ก็อาจจะเป็นได้ อาจจะต้องตัดมาหลายอักขระแทนตัว E อักขระเดียว ฯลฯ ครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Thu Dec 02, 2021 11:15 am
by Jetnipit
snasui wrote: Thu Dec 02, 2021 11:11 am :D ก็ต้องหาชื่อ Field ที่มันตรงกับ Expire มันอาจจะมี Filed ที่ลงท้ายด้วย E หลาย Filed ก็อาจจะเป็นได้ อาจจะต้องตัดมาหลายอักขระแทนตัว E อักขระเดียว ฯลฯ ครับ
ยังไม่ค่อยเข้าใจครับ รบกวนอธิบายใหม่ได้ไหมครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Thu Dec 02, 2021 11:26 am
by snasui
:D กรุณาอ่านทบทวนสิ่งที่ยกมา ผมเขียนไปครอบคลุมแล้วครับ

Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify

Posted: Thu Dec 02, 2021 11:32 am
by Jetnipit
ครับผม ขอบคุณครับ