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

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

[VB.NET] การอ่านโครงสร้างตารางข้อมูล MS Access และเลือกฟิลด์ข้อมูลเพื่อนำมาแสดงผล

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583




โปรเจคชุดนี้ไม่ธรรมดาน่ะครับ จุดประสงค์หลักๆจะเป็นการอ่านโครงสร้างตารางข้อมูลของไฟล์ MS Access มาแสดงผลลงใน ComboBox แล้วก็เลือกตารางใดๆขึ้นมาก่อน จากนั้นก็ให้แสดงผลฟิลด์ข้อมูลลงไปใน ListBox Control ต่อไปก็ให้ทำการเลือกฟิลด์ข้อมูลที่ต้องการเพื่อมาทำการแสดงผล ด้วยการทำ Query แล้วแสดงผลข้อมูลลงไปในตารางกริด นอกเหนือจากนี้คุณจะได้ทำการฝึกฝนการควบคุม ListBox Control ได้อีกทางหนึ่งด้วย โดยการเลื่อนตำแหน่งขึ้นลง หรือเพิ่มลบไอเทมที่มีอยู่ใน ListBox ... ไม่ขออธิบายมากไปดูโค้ดกันเลยดีกว่า ...


มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Imports System.Data.OleDb

  2. Public Class frmViewDataAccess
  3.     Dim Conn As OleDbConnection
  4.     Dim Cmd As OleDbCommand

  5.     Private Sub frmViewDataAccess_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  6.         Me.Dispose()
  7.         Application.Exit()
  8.     End Sub

  9.     Private Sub frmViewDataAccess_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  10.         '// ฟอร์มจะต้องกำหนด KeyPreview = True มาก่อนด้วย
  11.         Select Case e.KeyCode
  12.             Case Keys.F7
  13.                 Call btnQuery_Click(sender, e)
  14.             Case Keys.F10
  15.                 Me.Close()

  16.         End Select
  17.     End Sub

  18.     Private Sub frmViewDataAccess_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  19.         Me.CenterToScreen()
  20.         Me.ToolStrip1.Cursor = Cursors.Hand
  21.         Me.KeyPreview = True
  22.     End Sub

  23.     Private Sub btnBrowseFile_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowseFile.Click
  24.         ' ประกาศใช้งาน Open File Dialog ในแบบ Run Time
  25.         Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()

  26.         ' / ตั้งค่าการใช้งาน Open File Dialog
  27.         With dlgOpenFile
  28.             .InitialDirectory = MyPath(Application.StartupPath)
  29.             .Filter = "MS Access Files (*.mdb;*.accdb)|*.mdb;*.accdb"
  30.             .Title = "เลือกไฟล์ MS Access"
  31.             .FilterIndex = 1
  32.             .RestoreDirectory = True
  33.         End With

  34.         Dim strConn As String = ""
  35.         Try
  36.             ' หากเลือกปุ่ม OK หลังจากการ Browse ...
  37.             If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  38.                 lsbSource.Items.Clear()
  39.                 lsbDest.Items.Clear()
  40.                 '//
  41.                 txtFileName.Text = dlgOpenFile.FileName
  42.                 strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  43.                     dlgOpenFile.FileName & ";"
  44.                 Conn = New OleDbConnection(strConn)
  45.                 Conn.Open()
  46.                 '//
  47.                 Dim MyTable As New DataTable
  48.                 ' อ่านค่ารายชื่อตาราง (TABLE)
  49.                 MyTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
  50.                               New Object() {Nothing, Nothing, Nothing, "TABLE"})

  51.                 ' แสดงรายชื่อตาราง (Table)
  52.                 cmbTable.Items.Clear()
  53.                 For i = 0 To MyTable.Rows.Count - 1
  54.                     cmbTable.Items.Add(MyTable.Rows(i)!TABLE_NAME.ToString)
  55.                 Next i
  56.             End If
  57.         Catch ex As Exception
  58.             MessageBox.Show(ex.Message)
  59.         End Try

  60.     End Sub

  61.     ' / --------------------------------------------------------------------------------
  62.     ' / Get my project path
  63.     ' / AppPath = C:\My Project\bin\debug
  64.     ' / Replace "\bin\debug" with ""
  65.     ' / Return : C:\My Project\
  66.     Function MyPath(AppPath As String) As String
  67.         '/ MessageBox.Show(AppPath);
  68.         AppPath = AppPath.ToLower()
  69.         '/ Return Value
  70.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  71.         '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
  72.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  73.     End Function

  74.     Private Sub btnMoveRight_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveRight.Click
  75.         '// ยังไม่ได้เลือกไอเทม
  76.         If lsbSource.SelectedIndex < 0 Then
  77.             MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 1 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  78.         Else
  79.             '// เพิ่มไอเทมที่เลือกจาก lsbSource ไปให้กับ lsbDest
  80.             lsbDest.Items.Add(lsbSource.SelectedItem)
  81.             '// ลบไอเทมที่เลือกใน lsbSource ออกไป
  82.             lsbSource.Items.Remove(lsbSource.SelectedItem)
  83.         End If
  84.     End Sub

  85.     Private Sub btnMoveLeft_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveLeft.Click
  86.         If lsbDest.SelectedIndex < 0 Then
  87.             MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 2 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  88.         Else
  89.             '// เพิ่มไอเทมที่เลือกจาก lsbDest ไปให้กับ lsbSource
  90.             lsbSource.Items.Add(lsbDest.SelectedItem)
  91.             '// ลบไอเทมที่เลือกใน lsbDest ออกไป
  92.             lsbDest.Items.Remove(lsbDest.SelectedItem)
  93.         End If
  94.     End Sub

  95.     Private Sub btnMoveRightAll_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveRightAll.Click
  96.         '// ลูปเอาไอเทมทั้งหมดที่มีอยู่ใน lsbSource ไปให้กับ lsbDest
  97.         For Each item In lsbSource.Items
  98.             lsbDest.Items.Add(item)
  99.         Next
  100.         '// ลบไอเทมที่มีอยู่ทั้งหมดใน lsbSource ออกไป
  101.         lsbSource.Items.Clear()
  102.     End Sub

  103.     Private Sub btnMoveLeftAll_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveLeftAll.Click
  104.         txtSQL.Clear()
  105.         '// ลูปเอาไอเทมทั้งหมดที่มีอยู่ใน lsbDest ไปให้กับ lsbSource
  106.         For Each item In lsbDest.Items
  107.             lsbSource.Items.Add(item)
  108.         Next
  109.         '// ลบไอเทมที่มีอยู่ทั้งหมดใน lsbDest ออกไป
  110.         lsbDest.Items.Clear()
  111.     End Sub

  112.     Private Sub btnClose_Click(sender As System.Object, e As System.EventArgs)
  113.         Me.Close()
  114.     End Sub

  115.     Private Sub btnQuery_Click(sender As System.Object, e As System.EventArgs) Handles btnQuery.Click
  116.         If lsbDest.Items.Count <= 0 Then Exit Sub
  117.         If dgvData.Rows.Count > 0 Then dgvData.DataSource = Nothing

  118.         Try
  119.             Dim FieldName As String = String.Empty
  120.             For Each item In lsbDest.Items
  121.                 FieldName = FieldName & item & ","
  122.             Next
  123.             '// ตัดเครื่องหมายคอมม่าตัวท้ายสุดทิ้ง
  124.             If Microsoft.VisualBasic.Right(FieldName, 1) = "," Then FieldName = Mid(FieldName, 1, Len(FieldName) - 1)
  125.             '//
  126.             Dim strSQL As String = "SELECT " & FieldName & " FROM [" & cmbTable.Text & "]"
  127.             txtSQL.Text = strSQL
  128.             '//
  129.             Cmd = New OleDbCommand(strSQL, Conn)
  130.             If Conn.State = ConnectionState.Closed Then Conn.Open()
  131.             Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(Cmd)
  132.             Dim myDataSet As DataSet = New DataSet()
  133.             '// Using DataAdapter object fill data from database into DataSet object
  134.             myDA.Fill(myDataSet, "MyTable")
  135.             '// Binding DataSet to DataGridView
  136.             dgvData.DataSource = myDataSet.Tables("MyTable").DefaultView
  137.             lblCount.Text = "[จำนวน: " & Format(Val(dgvData.Rows.Count - 1), "#,##") & " รายการ]"

  138.             Conn.Close()
  139.             '// Setting DataGridView
  140.             With dgvData
  141.                 .RowHeadersVisible = False
  142.                 .AllowUserToAddRows = False
  143.                 .AllowUserToDeleteRows = False
  144.                 .AllowUserToResizeRows = False
  145.                 .MultiSelect = False
  146.                 .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  147.                 .ReadOnly = True
  148.                 ' Autosize Column
  149.                 .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  150.                 .AutoResizeColumns()
  151.                 .Font = New Font("Tahoma", 8)
  152.                 '// ตั้งค่า ColumnHeadersHeightSizeMode ก่อนที่จะทำการปรับความสูงของแถวได้
  153.                 .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  154.                 .ColumnHeadersHeight = 28

  155.                 '// กำหนดให้ EnableHeadersVisualStyles = False เพื่อให้ยอมรับการเปลี่ยนแปลงสีพื้นหลัง
  156.                 .EnableHeadersVisualStyles = False
  157.                 '// Even-Odd Color
  158.                 .AlternatingRowsDefaultCellStyle.BackColor = Color.LightYellow ' .AliceBlue
  159.                 ' ตัวอย่างการปรับ Header Style
  160.                 With .ColumnHeadersDefaultCellStyle
  161.                     .BackColor = Color.Navy
  162.                     .ForeColor = Color.Black
  163.                     .Font = New Font("Tahoma", 8, FontStyle.Bold)
  164.                 End With

  165.                 For iCol As Integer = 0 To .Columns.Count - 1
  166.                     '// คำนวณหาเลขคู่กับเลขคี่ หากเลขจำนวนเต็มใดๆหารเอาเศษ (Mod) ด้วย 2 แล้วได้คำตอบ 1 คือเลขคี่
  167.                     If iCol Mod 2 = 1 Then
  168.                         .Columns(iCol).HeaderCell.Style.BackColor = Color.DarkOrange
  169.                         '// หารเอาเศษด้วย 2 ได้ 0 คือเลขคู่
  170.                     Else
  171.                         .Columns(iCol).HeaderCell.Style.BackColor = Color.DeepSkyBlue
  172.                     End If
  173.                 Next
  174.             End With
  175.         Catch ex As Exception
  176.             MessageBox.Show(ex.Message, "Open Table")
  177.             Exit Sub
  178.         End Try
  179.     End Sub

  180.     Private Sub lsbSource_DoubleClick(sender As Object, e As System.EventArgs) Handles lsbSource.DoubleClick
  181.         '// ยังไม่ได้เลือกไอเทม
  182.         If lsbSource.SelectedIndex < 0 Then
  183.             MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 1 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  184.         Else
  185.             '// เพิ่มไอเทมที่เลือกจาก lsbSource ไปให้กับ lsbDest
  186.             lsbDest.Items.Add(lsbSource.SelectedItem)
  187.             '// ลบไอเทมที่เลือกใน lsbSource ออกไป
  188.             lsbSource.Items.Remove(lsbSource.SelectedItem)
  189.         End If
  190.     End Sub

  191.     Private Sub lsbDest_DoubleClick(sender As Object, e As System.EventArgs) Handles lsbDest.DoubleClick
  192.         If lsbDest.SelectedIndex < 0 Then
  193.             MessageBox.Show("กรุณาเลือกไอเทมในรายการที่ 2 ก่อน.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  194.         Else
  195.             '// เพิ่มไอเทมที่เลือกจาก lsbDest ไปให้กับ lsbSource
  196.             lsbSource.Items.Add(lsbDest.SelectedItem)
  197.             '// ลบไอเทมที่เลือกใน lsbDest ออกไป
  198.             lsbDest.Items.Remove(lsbDest.SelectedItem)
  199.         End If
  200.     End Sub

  201.     Private Sub btnMoveUp_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveUp.Click
  202.         'Make sure our item is not the first one on the list.
  203.         If lsbDest.SelectedIndex > 0 Then
  204.             Dim iRow = lsbDest.SelectedIndex - 1
  205.             lsbDest.Items.Insert(iRow, lsbDest.SelectedItem)
  206.             lsbDest.Items.RemoveAt(lsbDest.SelectedIndex)
  207.             lsbDest.SelectedIndex = iRow
  208.         End If
  209.     End Sub

  210.     Private Sub btnMoveDown_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveDown.Click
  211.         'Make sure our item is not the last one on the list.
  212.         If lsbDest.SelectedIndex < lsbDest.Items.Count - 1 Then
  213.             'Insert places items above the index you supply, since we want
  214.             'to move it down the list we have to do + 2
  215.             Dim iRow = lsbDest.SelectedIndex + 2
  216.             lsbDest.Items.Insert(iRow, lsbDest.SelectedItem)
  217.             lsbDest.Items.RemoveAt(lsbDest.SelectedIndex)
  218.             lsbDest.SelectedIndex = iRow - 1
  219.         End If
  220.     End Sub

  221.     Private Sub btnClearGrid_Click(sender As System.Object, e As System.EventArgs) Handles btnClearGrid.Click
  222.         dgvData.DataSource = Nothing
  223.         lblCount.Text = "[จำนวน: 0 รายการ]"
  224.     End Sub

  225.     Private Sub itemBtnExit_Click(sender As System.Object, e As System.EventArgs) Handles itemBtnExit.Click
  226.         Me.Close()
  227.     End Sub

  228.     Private Sub ToolStripStatusLabel3_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripStatusLabel3.Click
  229.         Process.Start("http://www.g2gnet.com/webboard")
  230.     End Sub

  231.     Private Sub ToolStripStatusLabel2_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripStatusLabel2.Click
  232.         Process.Start("https://www.facebook.com/g2gnet")
  233.     End Sub

  234.     '// เลือกตารางข้อมูล แล้วนำฟิลด์ข้อมูลแสดงผลลงใน ListBox (lsbSource)
  235.     Private Sub cmbTable_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbTable.SelectedIndexChanged
  236.         lsbSource.Items.Clear()
  237.         lsbDest.Items.Clear()
  238.         txtSQL.Clear()
  239.         ' ค้นคืน Schema เพื่ออ่านหลัก (Column) หรือ ฟิลด์ (Field) จากตารางที่เลือก
  240.         Dim cmd As OleDbCommand = New OleDbCommand(cmbTable.Text, Conn)
  241.         ' CommandType Enumeration มี 3 แบบคือ
  242.         ' StoredProcedure - The name of a stored procedure.
  243.         ' TableDirect - The name of a table.
  244.         ' Text - SQL text command. (ค่า Default)
  245.         cmd.CommandType = CommandType.TableDirect
  246.         '/ https://msdn.microsoft.com/en-us/library/system.data.commandtype(v=vs.110).aspx

  247.         If Conn.State = ConnectionState.Closed Then Conn.Open()
  248.         Dim DT As New DataTable
  249.         DT = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, cmbTable.Text, Nothing})
  250.         For i = 0 To DT.Rows.Count - 1
  251.             lsbSource.Items.Add(DT.Rows(i).Item(3).ToString())
  252.         Next i
  253.         '//
  254.         cmd.Dispose()
  255.     End Sub

  256.     Private Sub txtSQL_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtSQL.KeyDown
  257.         e.SuppressKeyPress = True
  258.     End Sub

  259.     Private Sub itemOpenFile_Click(sender As System.Object, e As System.EventArgs) Handles itemOpenFile.Click
  260.         Call btnBrowseFile_Click(sender, e)
  261.     End Sub
  262. End Class
คัดลอกไปที่คลิปบอร์ด



ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

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

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

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

0

กระทู้

51

โพสต์

232

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
232
โพสต์ 2019-5-28 16:42:05 | ดูโพสต์ทั้งหมด

ขอบคุณครับ

0

กระทู้

5

โพสต์

26

เครดิต

Newbie

Rank: 1

เครดิต
26
โพสต์ 2019-9-16 14:33:16 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-11-27 23:45 , Processed in 0.186556 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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