ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 144|ตอบกลับ: 1

[VB.NET] การประยุกต์ใช้งานไฟล์ INI (Initialize File) มาทำการเก็บข้อมูลขนาดเล็ก

[คัดลอกลิงก์]

59

กระทู้

62

โพสต์

294

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
294


Initialize File ซึ่งมันก็คือ Text File ธรรมดาๆนี่เองแหละครับ โดยไฟล์เหล่านี้จะมีนามสกุลเป็น INI (ปกติแอดมินจะอ่านสั้นๆว่า อินอิท) ซึ่งถูกใช้มานมนานแล้วตั้งแต่ยุค DOS, MS Windows 3.0/3.11 (Work Group) มาเรื่อยๆจนถึงปัจจุบันนี้ แต่มันก็ค่อยๆลดบทบาทลงไปเนื่องจากถูกเอกสาร XML (eXtensible Markup Language) เข้ามาแทนที่มันไปแล้วครับ ไฟล์ INI นี้มักจะจัดเก็บข้อมูล ข่าวสาร การตั้งค่าระบบที่สำคัญๆเอาไว้ ในลักษณะของการจัดเก็บข้อมูลแบบ Line By Line เพื่อหลีกเลี่ยงการเขียนโค้ดโปรแกรมที่ยุ่งยาก และเพื่อให้ง่ายต่อการปรับแต่งระบบ ส่วนอีกตัวที่มาคู่กันเพื่อจัดการกับระบบก็คือการควบคุมผ่าน Registry อันนี้ค่อนข้างจะยุ่งยากกว่า แถมมีการป้องกันของ Windows แอดมินก็จะขอนำไปกล่าวอีกครั้งในภายหลังล่ะกันครับ ...

INI File จะมีส่วนสำคัญ 3 ส่วน ดังนี้คือ ...
Section ส่วนของชื่อที่ปิดด้วยเครื่องหมาย Bracket [] ... เพื่อตั้งชื่อเป็นกลุ่มข้อมูล
Key เป็นชื่อเฉพาะที่มีค่าไม่ซ้ำกัน หรือ ก็คือตัวแปรดีๆนี่เองแหละครับ
Value เป็นค่าที่ถูกกำหนดให้กับ Key เพื่อใช้ในการอ่าน และ เขียนเข้าไปใน INI File


ตัวอย่างในวันนี้แอดมินจะนำเสนอการประยุกต์ใช้ INI เพื่อทำการเก็บข้อมูลขนาดเล็กๆเอาไว้พิมพ์รายงาน ซึ่งค้างเอาไว้จากเรื่อง แจกฟรีโค้ด ActiveReports.NET การพิมพ์ใบแจ้งค่าใช้จ่าย สำหรับหอพัก ห้องเช่า อพาร์ทเมนท์ แบบกระดาษครึ่ง A4 ... ความมหัศจรรย์ของ Get/WritePrivateProfileString ซึ่งถูกบรรจุเอาไว้ใน Windows API (Application Programming Interface) ... ณ วันนี้ที่เรามาจนถึง Dot Net Framework แต่กลับหนี API ไปไม่พ้น ซึ่งหากท่านที่พัฒนาการเขียนโปรแกรมมาจาก VB6 จะรู้เลยว่า API นี่คืออาวุธลับสำคัญในการเสริมเขี้ยวเล็บอันทรงพลังและมีประสิทธิภาพให้กับ VB6 ...

การประกาศใช้ Library Get/WritePrivateProfileString (อยู่ใน modFunction.vb)
  1.     ' / --------------------------------------------------------------------
  2.     ' / Initialized Management
  3.     Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringW" ( _
  4.         ByVal lpApplicationName As String, _
  5.         ByVal lpKeyName As String, _
  6.         ByVal lpString As String, _
  7.         ByVal lpFileName As String _
  8.         ) As Int32

  9.     Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
  10.         ByVal lpApplicationName As String, _
  11.         ByVal lpKeyName As String, _
  12.         ByVal lpDefault As String, _
  13.         ByVal lpReturnedString As String, _
  14.         ByVal nSize As Int32, _
  15.         ByVal lpFileName As String _
  16.         ) As Int32
  17.     ' / --------------------------------------------------------------------
คัดลอกไปที่คลิปบอร์ด
เราประกาศฟังค์ชั่นเป็นแบบ Private ก็เพราะเราจะใช้ ReadIni/WriteIni เป็นตัวกระทำในแบบ Public แทน

การเรียกใช้งานฟังค์ชั่น ReadIni เพื่อทำการอ่านข้อมูล INI
  1.     ' / --------------------------------------------------------------------
  2.     Public Function ReadIni(ByVal IniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamDefault As String) As String
  3.         Dim ParamVal As String = Space$(1024)
  4.         Dim LenParamVal As Long = GetPrivateProfileString(Section, ParamName, ParamDefault, ParamVal, Len(ParamVal), IniFileName)
  5.         ReadIni = Left$(ParamVal, LenParamVal)
  6.     End Function
คัดลอกไปที่คลิปบอร์ด
พารามิเตอร์ที่ต้องการ จะประกอบไปด้วย IniFileName, Section, ParamName ตัวนี้คือ Key นั่นเอง และ ParamDefault คือ Value ที่ต้องการจัดเก็บ ... อธิบายให้ฟังง่ายๆก็คือ เราต้องส่งค่าต่างๆเหล่านี้ที่ถูกกำหนดเอาไว้เป็นรูปแบบ (Pattern) ที่แน่นอนไปยัง GetPrivateProfileString API ส่วนที่เหลือฟังค์ชั่นมันจะจัดการแยกแยะให้เรานั่นเอง โดยที่เราแทบไม่ต้องไปสนใจเลย

ตัวอย่างการเรียกใช้งานแบบ Line by Line ...
  1. txtOwner.Text = ReadIni(strFileINI, "Config", "Owner", "")
คัดลอกไปที่คลิปบอร์ด
เป็นการอ่านค่าจาก Section=Config, มี Key=Owner จากนั้นมันก็จะ Return ค่ากลับมาเก็บเอาไว้ใน txtOwner.text (แต่ถ้าหากหาข้อมูลไม่เจอ มันจะคืนค่าว่างเปล่า "" ซึ่งเป็นค่า Default กลับมาให้แทน) เช่น
[Config]
Owner=ทองก้อน ฮาเร็ม อพาร์ทเมนท์

การเรียกใช้งานฟังค์ชั่น WriteIni เพื่อทำการเขียนข้อมูลเข้าไปใน INI
  1.     ' / --------------------------------------------------------------------
  2.     Public Function WriteIni(ByVal iniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamVal As String) As Integer
  3.         WriteIni = WritePrivateProfileString(Section, ParamName, ParamVal, iniFileName)
  4.     End Function
คัดลอกไปที่คลิปบอร์ด
ก็เช่นเดียวกันกับการ Read โดยมีการส่งค่าพารามิเตอร์ที่ถูกกำหนดเอาไว้ไปยังฟังค์ชั่น WriteIni จากนั้นข้อมูลเหล่านี้มันจะถูกจัดการภายใน WritePrivateProfileString ให้เอง

มาดูโค้ดในส่วนของฟอร์มหลักในการเรียกใช้งาน (frmSetting.vb)
  1. Public Class frmSetting
  2.     Dim strFileINI As String

  3.     ' / --------------------------------------------------------------------
  4.     Private Sub frmSetting_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  5.         strFileINI = MyPath(Application.StartupPath) & "Config.ini"
  6.         '// เช็คว่ามีไฟล์ Config.ini อยู่หรือไม่???
  7.         If My.Computer.FileSystem.FileExists(strFileINI) Then
  8.             txtOwner.Text = ReadIni(strFileINI, "Config", "Owner", "")
  9.             txtAddress.Text = ReadIni(strFileINI, "Config", "Address", "")
  10.             txtHeader.Text = ReadIni(strFileINI, "Config", "Header", "")
  11.             txtRemark1.Text = ReadIni(strFileINI, "Config", "Remark1", "")
  12.             txtRemark2.Text = ReadIni(strFileINI, "Config", "Remark2", "")
  13.             '// กรณีไม่เจอ ให้เริ่มต้นค่าใหม่
  14.         Else
  15.             txtOwner.Text = "ทองก้อน ฮาเร็ม อพาร์ทเมนท์"
  16.             txtAddress.Text = "123/456 ถ.กลางเมือง ต.เมืองเก่า อ.เมือง จ.ขอนแก่น โทร.043-XXX-XXX"
  17.             txtHeader.Text = "- ใบแจ้งค่าใช้จ่าย -"
  18.             txtRemark1.Text = "[1] กรุณาชำระเงินภายในวันที่ 32 ของทุกเดือน"
  19.             txtRemark2.Text = "[2] การเงินมีปัญหา ใส่ชุดนักศึกษามาหาป๋าทองก้อนได้ตลอด 24 ชั่วโมง"
  20.         End If
  21.     End Sub

  22.     Private Sub txtElectricRate_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtHeader.KeyPress
  23.         e.Handled = CheckDigitOnly(Asc(e.KeyChar))
  24.     End Sub

  25.     ' / --------------------------------------------------------------------
  26.     '// บันทึกไฟล์ INI
  27.     Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
  28.         WriteIni(strFileINI, "Config", "Owner", txtOwner.Text)
  29.         WriteIni(strFileINI, "Config", "Address", txtAddress.Text)
  30.         WriteIni(strFileINI, "Config", "Header", txtHeader.Text)
  31.         WriteIni(strFileINI, "Config", "Remark1", txtRemark1.Text)
  32.         WriteIni(strFileINI, "Config", "Remark2", txtRemark2.Text)
  33.         '//
  34.         MessageBox.Show("บันทึกการตั้งค่าระบบเรียบร้อย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  35.         Me.Close()
  36.     End Sub

  37.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  38.         Me.Close()
  39.     End Sub

  40.     Private Sub frmSetting_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  41.         Me.Dispose()
  42.     End Sub

  43. End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโปรแกรมต้นฉบับ VB.NET (2010) ได้ที่นี่

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

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

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

9

โพสต์

34

เครดิต

Newbie

Rank: 1

เครดิต
34
โพสต์ 2017-11-17 17:26:15 | ดูโพสต์ทั้งหมด

กำลังหาเลยครับผม

ขอบพระคุณอย่างสูงครับผม

0

กระทู้

3

โพสต์

24

เครดิต

Newbie

Rank: 1

เครดิต
24
โพสต์ 2017-12-7 09:03:36 | ดูโพสต์ทั้งหมด

ขอบคุณมากครับ

0

กระทู้

2

โพสต์

12

เครดิต

Newbie

Rank: 1

เครดิต
12
โพสต์ 2017-12-9 19:55:23 | ดูโพสต์ทั้งหมด

อยากให้เพิ่ม ตัวอย่าง การ ขึ้นทึกค่า ของ radio กับ check box ด้วย ครับ พอดี กำลังเริ่มศึกษา อิอิ จะได้มีตัวอย่างไว้ศึกษาด้วย ครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2017-12-17 18:37 , Processed in 0.358229 second(s), 11 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้