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

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

[VB.NET] แจกฟรีโค้ดการอ่านโครงสร้างตารางข้อมูล MS Access

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

310

กระทู้

501

โพสต์

6041

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6041


สคีมา (Schema) หมายถึง โครงสร้างข้อมูลหรือนิยามข้อมูล รวมถึงความสัมพันธ์ของข้อมูลในแต่ละเอ็นติตี้ ว่ามีความสัมพันธ์กันอย่างไร สำหรับโปรเจคนี้เราจะทำการอ่านโครงสร้างของตารางข้อมูลจากไฟล์ MS Access ว่าประกอบไปด้วยฟิลด์อะไรบ้าง และแต่ละฟิลด์นั้นมี Data Type หรือประเภทข้อมูลแบบไหนบ้าง ซึ่งจะนำไปใช้ประโยชน์ในกรณีที่ต้องจัดการฟิลด์ข้อมูลต่างๆ เพื่อทำการปรับปรุงโปรแกรมของเราในลักษณะแบบไดนามิค เช่น เมื่อต้องการเพิ่มฟิลด์ข้อมูลใหม่เข้าไป ก็ย่อมที่จะทำได้โดยง่าย

มาดูโค้ดกันเถอะ ...
  1. Public Class frmViewSchemaDBNet
  2.     Dim Conn As OleDbConnection
  3.     Dim MyTable As DataTable

  4.     ' / ------------------------------------------------------------------
  5.     Private Sub btnBrowse_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowse.Click
  6.         '/ ประกาศใช้งาน Open File Dialog ในแบบ Run Time
  7.         Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()

  8.         '/ ตั้งค่าการใช้งาน Open File Dialog
  9.         With dlgOpenFile
  10.             .InitialDirectory = Application.StartupPath
  11.             .Title = "เลือกไฟล์ MS Access"
  12.             .Filter = "MS Access Files (*.mdb;*.accdb)|*.mdb;*.accdb"
  13.             .FilterIndex = 1
  14.             .RestoreDirectory = True
  15.         End With

  16.         Dim strConn As String = ""
  17.         '/ หากเลือกปุ่ม OK หลังจากการ Browse ...
  18.         If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  19.             lvwData.Items.Clear()
  20.             txtFileName.Text = dlgOpenFile.FileName
  21.             strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
  22.                 dlgOpenFile.FileName & ";"

  23.             Conn = New OleDbConnection(strConn)
  24.             Conn.Open()

  25.             '/ อ่านค่ารายชื่อตาราง (TABLE) หากต้องการเห็นแบบสอบถาม (Query) ให้เปลี่ยนเป็น VIEW น่ะครับ
  26.             MyTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
  27.                           New Object() {Nothing, Nothing, Nothing, "TABLE"})

  28.             '/ แสดงรายชื่อตาราง (Table)
  29.             cmbTable.Items.Clear()
  30.             For i = 0 To MyTable.Rows.Count - 1
  31.                 cmbTable.Items.Add(MyTable.Rows(i)!TABLE_NAME.ToString)
  32.             Next i
  33.         End If
  34.     End Sub

  35.     ' / ------------------------------------------------------------------
  36.     Private Sub cmbTable_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbTable.SelectedIndexChanged

  37.         lvwData.Items.Clear()
  38.         '/ ค้นคืน Schema เพื่ออ่านหลัก (Column) หรือ ฟิลด์ (Field) จากตารางที่เลือก
  39.         Dim cmd As OleDbCommand = New OleDbCommand(cmbTable.Text, Conn)
  40.         '/ CommandType Enumeration มี 3 แบบคือ
  41.         '/ StoredProcedure - The name of a stored procedure.
  42.         '/ TableDirect - The name of a table.
  43.         '/ Text - SQL text command. (ค่า Default)
  44.         cmd.CommandType = CommandType.TableDirect
  45.         ' https://msdn.microsoft.com/en-us/library/system.data.commandtype(v=vs.110).aspx

  46.         '/ อ่านเฉพาะ Schema เท่านั้น
  47.         Dim Reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SchemaOnly)

  48.         ' รับข้อมูลโครงสร้างตาราง (Table)
  49.         Dim SchemaTable As DataTable = Reader.GetSchemaTable()

  50.         '/ แสดง Column Header ของแต่ละตารางทั้งหมด เช่น ชื่อ ขนาด ชนิดข้อมูล
  51.         Dim col As DataColumn
  52.         lvwData.View = View.Details
  53.         For Each col In SchemaTable.Columns
  54.             lvwData.Columns.Add(col.ColumnName, 100, HorizontalAlignment.Left)
  55.         Next

  56.         '/ แสดงรายละเอียดโครงสร้างตารางข้อมูล (Schema)
  57.         Dim row As DataRow
  58.         Dim ColCount As Integer = SchemaTable.Columns.Count
  59.         For Each row In SchemaTable.Rows
  60.             Dim ArrayList(ColCount) As String
  61.             Dim ColIdx As Integer
  62.             '/ เก็บรายละเอียดของแต่ละฟิลด์ข้อมูลไว้ใน Array List
  63.             For ColIdx = 0 To ColCount - 1
  64.                 ArrayList(ColIdx) = Convert.ToString(row(ColIdx))
  65.             Next

  66.             '/ ดึงข้อมูลจาก Array List มาแสดงผลใน ListView Control
  67.             Dim NewItem As ListViewItem = New ListViewItem(ArrayList)
  68.             lvwData.Items.Add(NewItem)
  69.         Next
  70.         cmd.Dispose()
  71.         Reader.Close()

  72.         '// Initialize ListView Control
  73.         With lvwData
  74.             .View = View.Details
  75.             .GridLines = True
  76.             .FullRowSelect = True
  77.             .HideSelection = False
  78.             .MultiSelect = False
  79.             .AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
  80.         End With

  81.     End Sub

  82.     Private Sub frmViewDataBaseNet_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  83.         Me.Dispose()
  84.         Application.Exit()
  85.     End Sub

  86.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  87.         Me.Close()
  88.     End Sub

  89.     Private Sub txtFileName_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtFileName.KeyDown
  90.         e.SuppressKeyPress = True
  91.     End Sub
  92. End Class
คัดลอกไปที่คลิปบอร์ด



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



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

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

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

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

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

GMT+7, 2024-4-23 15:28 , Processed in 0.172125 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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