Page 1 of 1
เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify
Posted: Fri Nov 19, 2021 11:20 am
by Jetnipit
สวัสดีครับผมเป็นสมาชิกใหม่และมือใหม่ รบกวนขอฝากตัวด้วยครับ
ตอนนี้ทำ 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
ตัวอย่างการปรับ 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
คุณลงทะเบียนด้วยชื่อที่มีไม้เอกนำหน้า ผมลบไม้เอกทิ้งให้แล้วทั้งสองชื่อ
ในการ 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 เลย
ค่อย ๆ ถามตอบกันไปครับ
การที่จะทราบได้ว่าไม่มีคำว่า 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
ขอบคุณสำหรับแนวทางครับ ได้แล้วครับตอนนี้
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 เหมือนข้อมูลไม่เข้าครับ ไม่ทราบว่าปัญหาอยู่ที่อะไรหรอครับ
โพสต์ 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)
ตัวอย่างการดักจับ 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
ก็ต้องหาชื่อ 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
ก็ต้องหาชื่อ Field ที่มันตรงกับ Expire มันอาจจะมี Filed ที่ลงท้ายด้วย E หลาย Filed ก็อาจจะเป็นได้ อาจจะต้องตัดมาหลายอักขระแทนตัว E อักขระเดียว ฯลฯ ครับ
ยังไม่ค่อยเข้าใจครับ รบกวนอธิบายใหม่ได้ไหมครับ
Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify
Posted: Thu Dec 02, 2021 11:26 am
by snasui
กรุณาอ่านทบทวนสิ่งที่ยกมา ผมเขียนไปครอบคลุมแล้วครับ
Re: เอาชื่อคน และชื่อฟิลด์ ที่ Loop ได้ของคนๆนั้น แสดงขึ้น Line Notify
Posted: Thu Dec 02, 2021 11:32 am
by Jetnipit
ครับผม ขอบคุณครับ