|
หลังจากได้ปล่อย โปรแกรมการพิมพ์ใบแจ้งค่าใช้จ่ายหอพัก/อพาร์ทเมนท์ (RoomPayment Lite Version) ซึ่งเป็นงานชิ้นแรกที่แอดมินได้ใช้ฐานข้อมูล SQLite สำหรับบทความนี้แอดมินจะมาแจกโค้ดในการสร้างฟิลด์ข้อมูล ตาราง และไฟล์ฐานข้อมูล SQLite แบบไดนามิค เพราะสำหรับโปรเจคดังกล่าวนั้น แอดมินต้องใช้การสร้างโครงสร้างต่างๆของ SQLite ด้วยการเขียนโค้ดเองทั้งหมด ตัว SQLite มีความโดดเด่นในเรื่องของจำนวนชนิดข้อมูลค่อนข้างน้อย คือมีแค่ Integer (เลขจำนวนเต็ม), Text (ตัวอักษร), Real (จำนวนจริง หรือเลขทศนิยม), Blob (เก็บข้อมูลแบบไบนารี่) และใน SQLite 3 ได้เพิ่ม Numeric เข้ามาอีกตัว รายละเอียดในเรื่องชนิดข้อมูลของ SQLite ศึกษาเพิ่มเติมได้จากที่นี่ ...
ดาวน์โหลด System.Data.SQLite สำหรับแอดมินใช้ Net Framework เวอร์ชั่น 4 ขนาด 64 บิต (sqlite-netFx40-setup-x64-2010-1.0.111.0.exe) ...
ก่อนที่จะเริ่มต้นลงโค้ด จะต้อง Add Reference System.Data.SQLite เข้ามาก่อน ... และต้องคัดลอกไฟล์ SQLite.Interop.DLL เอาไปไว้ที่โฟลเดอร์โปรเจค Bin\Debug ก่อนด้วย (สำหรับ Visual Studio เวอร์ชั่นที่สูงกว่า ก็จะเป็น Bin\x86\Debug)
ไปที่ Project Perperties เพื่อปรับขนาดจำนวนบิตให้เป็น Any CPU กรณี 64 บิต หากเป็น SQLite 32 บิตให้เลือก x86 ...
การใช้ DB Browser for SQLite ซึ่งเป็นของฟรีในการบริหารจัดการกับ SQLite (ดาวน์โหลดได้ที่นี่)
มาดูโค้ดฉบับเต็มกันเถอะ ...
- Imports System.Data.SQLite
- Public Class frmCreateSQLiteDB
- Dim Conn As SQLiteConnection
- ' / --------------------------------------------------------------------
- ' / Close Connection
- Private Sub frmCreateSQLiteDB_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- If Not IsNothing(Conn) Then
- Conn.Close()
- Conn.Dispose()
- End If
- Application.Exit()
- End Sub
- ' / --------------------------------------------------------------------
- Private Sub frmCreateSQLiteDB_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- With cmbFieldType
- .Items.Add("INTEGER")
- .Items.Add("TEXT")
- .Items.Add("REAL")
- .Items.Add("NUMERIC")
- End With
- cmbFieldType.SelectedIndex = 0
- '/
- Call InitializeGridInfo()
- txtTableName.Text = "SampleTable"
- End Sub
- ' / --------------------------------------------------------------------
- Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click
- If Trim(txtFieldName.Text) = "" Or Trim(txtFieldName.Text.Length) = 0 Then Return
- For i = 0 To dgvInfo.RowCount - 1
- If Trim(txtFieldName.Text).ToLower = LCase(dgvInfo.Rows(i).Cells(0).Value).ToString Then
- MessageBox.Show("มีฟิลด์ข้อมูลนี้อยู่ในตารางเรียบร้อยแล้ว.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- txtFieldName.Focus()
- Return
- End If
- Next
- '// ตรวจคำสงวนที่นำมาใช้งานไม่ได้
- Dim strReserve As String = "integer text real numeric blob"
- If strReserve.Contains(Trim(txtFieldName.Text.ToLower)) Then
- MessageBox.Show("เป็นคำสงวนไม่สามารถนำมาใช้ได้.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
- txtFieldName.Focus()
- Return
- End If
- '//
- dgvInfo.Rows.Add()
- dgvInfo.Rows(dgvInfo.Rows.Count - 1).Cells(0).Value = Trim(txtFieldName.Text)
- dgvInfo.Rows(dgvInfo.Rows.Count - 1).Cells(1).Value = cmbFieldType.Text
- '//
- txtFieldName.Clear()
- txtFieldName.Focus()
- End Sub
- ' / --------------------------------------------------------------------
- ' / Initialized settings for DataGridView @Run Time.
- ' / --------------------------------------------------------------------
- Private Sub InitializeGridInfo()
- With dgvInfo
- .RowHeadersVisible = True
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = False
- '// Need to modify each cell.
- .SelectionMode = DataGridViewSelectionMode.CellSelect
- .ReadOnly = False
- '//
- .Font = New Font("Tahoma", 9)
- '/ Automatically set the width.
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- '/ Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.White
- .Font = New Font("Tahoma", 9, FontStyle.Bold)
- End With
- End With
- '// Add Column.
- Dim FieldName As New DataGridViewTextBoxColumn()
- With FieldName
- .HeaderText = "ชื่อฟิลด์ข้อมูล"
- .ReadOnly = True
- End With
- dgvInfo.Columns.Add(FieldName)
- '//
- Dim FieldType As New DataGridViewComboBoxColumn()
- With FieldType
- .HeaderText = "ชนิดฟิลด์ข้อมูล"
- .Items.Add("INTEGER")
- .Items.Add("TEXT")
- .Items.Add("REAL")
- .Items.Add("NUMERIC")
- End With
- dgvInfo.Columns.Add(FieldType)
- '//
- Dim btnDelRow As New DataGridViewButtonColumn()
- With btnDelRow
- .HeaderText = ""
- .Text = "ลบฟิลด์"
- .Name = "btnDelRow"
- .UseColumnTextForButtonValue = True
- .Width = 80
- .ReadOnly = True
- End With
- dgvInfo.Columns.Add(btnDelRow)
- End Sub
- ' / --------------------------------------------------------------------
- Private Sub dgvInfo_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvInfo.CellClick
- Select Case e.ColumnIndex
- Case 2
- dgvInfo.Rows.Remove(dgvInfo.CurrentRow)
- End Select
- End Sub
- Private Sub txtFieldName_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtFieldName.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- Call btnAdd_Click(sender, e)
- End If
- End Sub
- ' / --------------------------------------------------------------------
- Private Sub btnCreate_Click(sender As System.Object, e As System.EventArgs) Handles btnCreate.Click
- If Trim(txtTableName.Text) = "" Or Trim(txtTableName.Text).Length = 0 Then
- MessageBox.Show("กรุณาตั้งชื่อตารางก่อนด้วย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Return
- End If
- If dgvInfo.RowCount = 0 Then
- MessageBox.Show("ยังไม่มีรายการข้อมูล กรุณาทำการเพิ่มก่อนด้วย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Return
- End If
- '//
- Dim dlgSaveFile As New SaveFileDialog()
- With dlgSaveFile
- .Filter = "SQLite 3 (*.db3)|*.db3|SQLite (*.db)|*.db"
- .Title = "บันทึกไฟล์ SQLite"
- .DefaultExt = "db3"
- .InitialDirectory = MyPath(Application.StartupPath)
- .RestoreDirectory = True
- End With
- If dlgSaveFile.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
- Try
- '/ Check File Exist. If available, delete it before.
- If System.IO.File.Exists(dlgSaveFile.FileName) = True Then System.IO.File.Delete(dlgSaveFile.FileName)
- '// Create the SQLite database
- SQLiteConnection.CreateFile(dlgSaveFile.FileName)
- Dim sQuery As String = String.Empty
- For i = 0 To dgvInfo.RowCount - 1
- sQuery = sQuery & dgvInfo.Rows(i).Cells(0).Value.ToString & " " & dgvInfo.Rows(i).Cells(1).Value.ToString & ","
- Next
- '// Cut the last comma.
- If Microsoft.VisualBasic.Right(sQuery, 1) = "," Then sQuery = Mid(sQuery, 1, Len(sQuery) - 1)
- Dim CreateTable As String = String.Empty
- '/ Create table sql statement
- '/ CREATE TABLE IF NOT EXISTS SampleTable (AAA INTEGER,BBB TEXT,CCC REAL)
- CreateTable &= "CREATE TABLE IF NOT EXISTS " & Trim(txtTableName.Text) & " ("
- CreateTable &= sQuery & ")"
- '// Check File Exist
- If System.IO.File.Exists(dlgSaveFile.FileName) = True Then
- System.IO.File.Delete(dlgSaveFile.FileName)
- End If
- '// Create the SQLite database
- SQLiteConnection.CreateFile(dlgSaveFile.FileName)
- Using MyConn As New SQLiteConnection("Data Source=" & dlgSaveFile.FileName & ";Version=3;New=True;")
- MyConn.Open()
- Using MyCmd As New SQLiteCommand(CreateTable, MyConn)
- MyCmd.ExecuteNonQuery()
- End Using
- End Using
- '// START
- Try
- '/ Declare
- Dim DA As SQLiteDataAdapter
- Dim DS As DataSet
- '// Open connection
- Dim strConn As String = "Data Source=" & dlgSaveFile.FileName & ";Version=3;New=True;"
- Conn = New SQLiteConnection(strConn)
- Conn.Open()
- DA = New SQLiteDataAdapter("SELECT * FROM " & Trim(txtTableName.Text), Conn)
- DS = New DataSet
- DA.Fill(DS, "MyTest")
- dgvData.DataSource = DS.Tables("MyTest").DefaultView
- DS.Dispose()
- DA.Dispose()
- '/ dgvData for input value.
- Call InitializeGridData()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- Conn.Close()
- MessageBox.Show("Created successfully.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
- End Try
- End If
- End Sub
- ' / --------------------------------------------------------------------
- Private Sub InitializeGridData()
- With dgvData
- .RowHeadersVisible = True
- .AllowUserToAddRows = True
- .AllowUserToDeleteRows = True
- .AllowUserToResizeRows = False
- .MultiSelect = False
- '// Need to modify each cell.
- .SelectionMode = DataGridViewSelectionMode.CellSelect
- .ReadOnly = False
- '//
- .Font = New Font("Tahoma", 9)
- ' Automatically set the width.
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- '/ Adjust Header Styles
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.White
- .Font = New Font("Tahoma", 9, FontStyle.Bold)
- End With
- End With
- End Sub
- ' / Get my project path
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Function MyPath(ByVal AppPath As String) As String
- '/ MessageBox.Show(AppPath);
- AppPath = AppPath.ToLower()
- '/ Return Value
- MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
- '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
- If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
- End Function
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดชุดเต็ม VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|