ลงชื่อเข้าใช้
กระดานข่าว VB
>
เว็บบอร์ดเปิดโค้ดต้นฉบับ
ส่ง
|
[VB.NET] โค้ดตรวจสอบวันที่หมดอายุการใช้งานของโปรแกรมด้วยการใช้ Google Sheet เป็นที่เก็บข้อมูล
ดู1770
|
โพสต์0
|
บุ๊คมาร์ก
thongkorn
ดูทั้งหมด
2025-5-24 12:07:39
Add References
... ใช้ Nuget Package Manager จะสะดวกกว่า
ข้อมูลตัวอย่างใน Google Sheet
...
โค้ดตรวจสอบวันที่หมดอายุการใช้งานของโปรแกรมด้วยการใช้ Google Sheet เป็นที่เก็บข้อมูล
ผ่านทาง
Google Visualization API
...
คลิปวิดีโอประกอบคำอธิบายบางส่วน
...
มาดูโค้ดฉบับเต็มกันเถอะ
...
โค้ด:
Imports System.Net
'// Download MaterialSkin.2 packages.
'// [url]https://www.nuget.org/packages/MaterialSkin.2/[/url]
Imports MaterialSkin
Imports Newtonsoft.Json.Linq
'// คลิปวิดีโอการรับไฟล์ Credentials เพื่อทำการติดต่อกับ Google Sheets และการกำหนดสิทธิ์การเข้าถึง
'// [url]https://www.youtube.com/watch?v=xdYsctNAGEE[/url]
'// ------------------------------------------------------------------------------------------------
'// Google Visualization API Reference ... [url]https://developers.google.com/chart/interactive/docs/reference[/url]
'// Google Visualization API
'// เป็น API จาก Google ที่ช่วยให้เราสามารถดึงข้อมูลจากแหล่งข้อมูลต่างๆ เช่น Google Sheets หรือไฟล์ข้อมูลอื่นๆ
'// แล้วนำข้อมูลนั้นมา แสดงผลในรูปแบบกราฟ, ตาราง หรือ Visualization ต่างๆบนเว็บได้ง่ายๆ
'// เหมาะสำหรับการสร้างแดชบอร์ด หรือรายงานแบบ Interactive ที่ทำงานบนเว็บ
'// Google Visualization API มีฟอร์แมตข้อมูลเฉพาะที่เรียกว่า DataTable (เหมือนตารางฐานข้อมูล มีคอลัมน์และแถว)
'// เราสามารถดึงข้อมูลผ่าน URL โดยใช้ Google Visualization Query Language (GVQL) ซึ่งคล้าย SQL
'// ------------------------------------------------------------------------------------------------
Public Class frmLogin
'// ป้อน Spreadsheet ID และชื่อชีต
Private Const SpreadsheetId As String = "SPREAD_SHEET_ID" '// <-- เปลี่ยนเป็นของคุณ
'Private Const ApplicationName As String = "" '// ไม่ได้ใช้งาน
Private Const SheetName As String = "SHEET_NAME"
Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'// ข้อมูลตัวอย่าง
txtUserName.Text = "admin"
txtPassword.Text = "admin"
With Me
.MinimumSize = New Point(451, 503)
.MaximumSize = New Point(451, 503)
End With
'// Code sample.
'// [url]https://www.nuget.org/packages/MaterialSkin.2/[/url]
Dim SkinManager As MaterialSkinManager = MaterialSkinManager.Instance
SkinManager.AddFormToManage(Me)
SkinManager.Theme = MaterialSkinManager.Themes.DARK
SkinManager.ColorScheme = New ColorScheme(Primary.Amber500, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE)
'// ตัวอย่างของ ColorScheme
'SkinManager.ColorScheme = New ColorScheme(Primary.Blue300, Primary.Blue500, Primary.Blue500, Accent.Blue400, TextShade.WHITE)
'SkinManager.ColorScheme = New ColorScheme(Primary.Green600, Primary.Green700, Primary.Green200, Accent.Red100, TextShade.WHITE)
'SkinManager.ColorScheme = New ColorScheme(Primary.LightBlue600, Primary.LightBlue700, Primary.Green200, Accent.LightGreen700, TextShade.WHITE)
'SkinManager.ColorScheme = New ColorScheme(Primary.Cyan500, Primary.Cyan700, Primary.Cyan100, Accent.Blue100, TextShade.WHITE)
End Sub
Private Sub swPassword_CheckedChanged(sender As Object, e As EventArgs) Handles swPassword.CheckedChanged
txtPassword.Focus()
txtPassword.Password = Not swPassword.Checked
End Sub
' / ------------------------------------------------------------------------------------------------
' / เริ่มต้นการเข้าสู่ระบบ
' / ------------------------------------------------------------------------------------------------
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Dim UserName As String = txtUserName.Text.Trim()
Dim Password As String = txtPassword.Text.Trim()
If String.IsNullOrEmpty(UserName) OrElse String.IsNullOrEmpty(Password) Then
MessageBox.Show("กรุณากรอก Username และ Password", "แจ้งเตือน", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return
End If
'//
'// ใช้ Google Visualization API เพื่อดึงข้อมูลทั้งหมด
Dim SheetUrl As String = "https://docs.google.com/spreadsheets/d/" & SpreadsheetId & "/gviz/tq?tqx=out:json&sheet=" & SheetName
Try
Using Client As New WebClient()
Dim JsonRaw As String = Client.DownloadString(SheetUrl)
'// ตัดส่วนหัวออก (Google ใส่ "/*O_o*/" และ "google.visualization.Query.setResponse(...)")
Dim startIndex = JsonRaw.IndexOf("(") + 1
Dim endIndex = JsonRaw.LastIndexOf(")")
Dim jsonData = JsonRaw.Substring(startIndex, endIndex - startIndex)
'//
Dim jObj As JObject = JObject.Parse(jsonData)
Dim rows As JArray = jObj("table")("rows")
'// ตัวอย่าง ... Columns ประกอบด้วย {UserPK, UserName, Password, ExpireDate}
'// {
'// "table" {
'// "rows": [
'// { "c": [ {"v": "1"}, {"v": "admin"}, {"v": "admin"}, {"v": "30/05/2568"} ] },
'// { "c": [ {"v": "2"}, {"v": "user"}, {"v": "user"}, {"v": "21/05/2568"} ] }
'// ]
'// }
'// }
For Each row As JObject In rows
Dim cols As JArray = row("c")
Dim userPK = cols(0)("v").ToString()
Dim user = cols(1)("v").ToString()
Dim pass = cols(2)("v").ToString()
Dim expireDate = cols(3)("v").ToString()
'// จัดรูปแบบวันที่ก่อน
Dim ExpireDateTime As DateTime? = ParseDateFunctionString(expireDate)
If user.Equals(UserName, StringComparison.OrdinalIgnoreCase) AndAlso pass.Equals(Password) Then
If ExpireDateTime >= DateTime.Now Then
MessageBox.Show("เข้าสู่ระบบสำเร็จ!", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
frmMain.Show()
Me.Hide()
Return
Else
MessageBox.Show("บัญชีหมดอายุ กรุณาติดต่อผู้ดูแลระบบ", "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Application.Exit()
Return
End If
End If
Next
MessageBox.Show("Username หรือ Password ไม่ถูกต้อง!!!", "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End Using
Catch ex As Exception
MessageBox.Show("เกิดข้อผิดพลาด: " & ex.Message, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
' / ------------------------------------------------------------------------------------------------
' / ต้องเขียนโค้ดดึงค่าปี เดือน วัน ออกจาก string "Date(2568,5,30)" ก่อน
' / Google Sheet นับเดือน 1 เป็น 0 เราจึงต้อง +1 เข้าไป
' / ------------------------------------------------------------------------------------------------
Function ParseDateFunctionString(rawDate As String) As DateTime?
'// ตรวจสอบรูปแบบ "Date(2568,5,30)"
Dim pattern As String = "^Date\((\d+),(\d+),(\d+)\)[ DISCUZ_CODE_0 ]quot;
Dim m As Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(rawDate, pattern)
If m.Success Then
Dim yearBE As Integer = Integer.Parse(m.Groups(1).Value)
Dim month As Integer = Integer.Parse(m.Groups(2).Value) + 1 '// เพราะ Google เริ่มนับเดือนที่ 0 เลยต้อง +1 เข้าไป
Dim day As Integer = Integer.Parse(m.Groups(3).Value)
'// แปลงปี พ.ศ. เป็น ค.ศ.
Dim yearAD As Integer = yearBE
If yearBE > 2500 Then yearAD = yearBE - 543
Try
Dim MyDateTime As New DateTime(yearAD, month, day)
Return MyDateTime
Catch ex As Exception
Return Nothing
End Try
Else
Return Nothing
End If
End Function
Private Sub txtUserName_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtUserName.KeyPress
'// Press ENTER
If Asc(e.KeyChar) = 13 Then
e.Handled = True '// No beep
SendKeys.Send("{TAB}")
End If
End Sub
Private Sub txtPassword_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPassword.KeyPress
'// Press ENTER
If Asc(e.KeyChar) = 13 Then
e.Handled = True '// No beep
SendKeys.Send("{TAB}")
End If
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub frmLogin_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
GC.SuppressFinalize(Me)
Application.Exit()
End Sub
End Class
ดาวน์โหลดโค้ดต้นฉบับ VB.NET & .Net Framework 4.6.2+ ได้ที่นี่
...
ไฟล์แนบ:
คุณจำเป็นต้อง
ลงชื่อเข้าใช้
ก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีบัญชีหรือยังไม่ได้เป็นสมาชิก กรุณา
ลงทะเบียน
G2GNet.com
Powered by
Discuz!
X3.4
โฮมเพจ
|
รูปแบบทั่วไป
|
รูปแบบโมเดิร์น
|
รูปแบบคอมพิวเตอร์