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

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

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

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

320

กระทู้

512

โพสต์

6585

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6585



DBase File
ก็เป็นระดับไฟล์เบส (File DataBase) เหมือนกันกับ MS Access แต่ว่า DBase หรือไฟล์ที่มีนามสกุล DBF จะแยกเป็น 1 ไฟล์ต่อ 1 ตารางข้อมูล ดังนั้นเวลาเราเลือกมาใช้งานเพื่อทำการ Query เราจะต้องทำการแยกชื่อไฟล์ออกจากนามสกุลเสียก่อน ...


การจะเชื่อมต่อหรือพูดคุยกับฐานข้อมูล DBF ได้ จะต้องทำผ่าน Object Linking and Embedding หรือ OLE (อ่านว่าโอเล่) สำหรับ FoxPro ...
ดาวน์โหลดและทำการติดตั้ง Microsoft OLE DB Provider for Visual FoxPro 9.0 ...  



การ Add Reference MS Excel (แอดมินใช้ Office 2010 หรือ เวอร์ชั่น 14 หากไม่ตรงกับรุ่นของแอดมิน ต้องทำการเลือกเข้ามาใหม่ก่อนครับ)



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

  3. Public Class frmViewDataDBF
  4.     Dim Conn As OleDbConnection
  5.     Dim Cmd As OleDbCommand
  6.     Dim dbfName As String

  7.     Private Sub frmViewDataDBF_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  8.         Me.Dispose()
  9.         Application.Exit()
  10.     End Sub

  11.     '// ต้องกำหนดให้ฟอร์มมีคุณสมบัติ KeyPreview = True
  12.     Private Sub frmViewDataDBF_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  13.         Select Case e.KeyCode
  14.             Case Keys.F7
  15.                 Call btnQuery_Click(sender, e)
  16.             Case Keys.F10
  17.                 Me.Close()
  18.             Case Keys.F6
  19.                 Call itemExportXLS_Click(sender, e)
  20.         End Select
  21.     End Sub

  22.     Private Sub frmViewDataDBF_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  23.         Me.CenterToScreen()
  24.         Me.ToolStrip1.Cursor = Cursors.Hand
  25.         Me.KeyPreview = True
  26.     End Sub

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

  30.         ' / ตั้งค่าการใช้งาน Open File Dialog
  31.         With dlgOpenFile
  32.             .InitialDirectory = MyPath(Application.StartupPath)
  33.             .Title = "เลือกไฟล์ DBF"
  34.             .Filter = "DBase Files (*.dbf)|*.dbf"
  35.             .FilterIndex = 1
  36.             .RestoreDirectory = True
  37.         End With

  38.         Dim strConn As String = ""
  39.         Try
  40.             '/ หากเลือกปุ่ม OK หลังจากการ Browse ...
  41.             If dlgOpenFile.ShowDialog() = DialogResult.OK Then
  42.                 lsbSource.Items.Clear()
  43.                 lsbDest.Items.Clear()
  44.                 '//
  45.                 txtFileName.Text = dlgOpenFile.FileName
  46.                 strConn = "Provider=VFPOLEDB.1;Data Source=" & dlgOpenFile.FileName & ";"
  47.                 dbfName = dlgOpenFile.FileName
  48.                 Dim sArr() As String
  49.                 sArr = Split(dbfName, "")
  50.                 '// แยกโฟลเดอร์, ไฟล์ และ นามสกุล ออกให้หมดจนเหลือเพียงแต่ชื่อไฟล์เท่านั้น
  51.                 '// เช่น C:\Data\Sample.dbf --> จะต้องเหลือเพียง Sample ซึ่งจะแทนชื่อตารางนั่นเอง
  52.                 dbfName = Microsoft.VisualBasic.Left(sArr(UBound(sArr)), (InStrRev(sArr(UBound(sArr)), ".") - 1))
  53.                 Dim strSQL As String = "SELECT * FROM " & dbfName

  54.                 Conn = New OleDbConnection(strConn)
  55.                 Conn.Open()
  56.                 '// อ่านค่ารายชื่อตาราง (TABLE)
  57.                 Dim DT As New DataTable
  58.                 DT = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, dbfName, Nothing})
  59.                 For i = 0 To DT.Rows.Count - 1
  60.                     lsbSource.Items.Add(DT.Rows(i).Item(3).ToString())
  61.                 Next i
  62.                 DT.Dispose()
  63.             End If
  64.         Catch ex As Exception
  65.             MessageBox.Show(ex.Message)
  66.         End Try

  67.     End Sub

  68.     ' / --------------------------------------------------------------------------------
  69.     ' / Get my project path
  70.     ' / AppPath = C:\My Project\bin\debug
  71.     ' / Replace "\bin\debug" with ""
  72.     ' / Return : C:\My Project\
  73.     Function MyPath(AppPath As String) As String
  74.         '/ MessageBox.Show(AppPath);
  75.         AppPath = AppPath.ToLower()
  76.         '/ Return Value
  77.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  78.         '// If not found folder then put the \ (BackSlash) at the end.
  79.         If Microsoft.VisualBasic.Right(MyPath, 1) <> "" Then MyPath = MyPath & ""
  80.     End Function

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

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

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

  110.     Private Sub btnMoveLeftAll_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveLeftAll.Click
  111.         '// ลูปเอาไอเทมทั้งหมดที่มีอยู่ใน lsbDest ไปให้กับ lsbSource
  112.         For Each item In lsbDest.Items
  113.             lsbSource.Items.Add(item)
  114.         Next
  115.         '// ลบไอเทมที่มีอยู่ทั้งหมดใน lsbDest ออกไป
  116.         lsbDest.Items.Clear()
  117.     End Sub

  118.     Private Sub btnClose_Click(sender As System.Object, e As System.EventArgs)
  119.         Me.Close()
  120.     End Sub

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

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

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

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

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

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

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

  207.     Private Sub btnMoveUp_Click(sender As System.Object, e As System.EventArgs) Handles btnMoveUp.Click
  208.         'Make sure our item is not the first one on the list.
  209.         If lsbDest.SelectedIndex > 0 Then
  210.             Dim iRow = lsbDest.SelectedIndex - 1
  211.             lsbDest.Items.Insert(iRow, lsbDest.SelectedItem)
  212.             lsbDest.Items.RemoveAt(lsbDest.SelectedIndex)
  213.             lsbDest.SelectedIndex = iRow
  214.         End If
  215.     End Sub

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

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

  231.     Private Sub itemBtnExit_Click(sender As System.Object, e As System.EventArgs) Handles itemBtnExit.Click
  232.         Me.Close()
  233.     End Sub

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

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

  240.     Private Sub itemExportXLS_Click(sender As System.Object, e As System.EventArgs) Handles itemExportXLS.Click
  241.         '// ไม่มีข้อมูลในตารางกริด ก็สั่งให้เด้งหนีออกไป
  242.         If dgvData.Rows.Count = 0 Then Exit Sub
  243.         '// พิจารณาการเลือกใช้ชนิดข้อมูล (Data Type) ให้เหมาะสม
  244.         Dim MaxRow As Integer, MaxCol As Short
  245.         Dim nRow As Integer, nCol As Short
  246.         Dim xlsApp As New Excel.Application
  247.         Dim xlsWorkBook As Excel.Workbook = xlsApp.Workbooks.Add
  248.         Dim xlsWorkSheet As Excel.Worksheet = CType(xlsWorkBook.Worksheets(1), Excel.Worksheet)
  249.         '// S T A R T
  250.         Try
  251.             xlsApp.Visible = True
  252.             '// หาค่าจำนวนแถว
  253.             MaxRow = dgvData.RowCount
  254.             '// หาค่าจำนวนหลัก
  255.             MaxCol = dgvData.Columns.Count - 1
  256.             With xlsWorkSheet
  257.                 .Cells.Select()
  258.                 .Cells.Delete()
  259.                 '// Header
  260.                 For nCol = 0 To MaxCol
  261.                     .Cells(1, nCol + 1).Value = dgvData.Columns(nCol).HeaderText
  262.                 Next nCol
  263.                 '// ไล่ตามจำนวนแถว
  264.                 For nRow = 0 To MaxRow - 1
  265.                     For nCol = 0 To MaxCol
  266.                         .Cells(nRow + 2, nCol + 1).value = dgvData.Rows(nRow).Cells(nCol).Value
  267.                     Next nCol   '// Nested Loop
  268.                     '// หากชุดคำสั่งที่อยู่ในลูป For มันมีจำนวนเยอะมาก
  269.                     '// การให้ตัวแปรต่อท้าย Next จะช่วยให้เรารู้ว่ามันอยู่ใน Loop ไหน
  270.                 Next nRow

  271.                 '// กำหนดรูปแบบใน WorkSheet
  272.                 .Rows("1:1").Font.FontStyle = "Bold"
  273.                 .Rows("1:1").Font.Size = 10
  274.                 '//
  275.                 .Cells.Columns.AutoFit()
  276.                 .Cells.Select()
  277.                 .Cells.EntireColumn.AutoFit()
  278.                 .Cells(1, 1).Select()
  279.             End With
  280.             '//
  281.             releaseObject(xlsWorkSheet)
  282.             releaseObject(xlsWorkBook)
  283.             releaseObject(xlsApp)
  284.         Catch ex As Exception
  285.             MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  286.         End Try
  287.         xlsWorkSheet = Nothing
  288.         xlsWorkBook = Nothing
  289.         xlsApp = Nothing

  290.     End Sub

  291.     ' / --------------------------------------------------------------------------------
  292.     Private Sub releaseObject(ByVal obj As Object)
  293.         Try
  294.             System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
  295.             obj = Nothing
  296.         Catch ex As Exception
  297.             obj = Nothing
  298.             MessageBox.Show("Exception Occured while releasing object " + ex.ToString())
  299.         Finally
  300.             GC.Collect()
  301.         End Try
  302.     End Sub

  303.     Private Sub txtSQL_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtSQL.KeyDown
  304.         '// Lock KeyDown
  305.         e.SuppressKeyPress = True
  306.     End Sub
  307. End Class
คัดลอกไปที่คลิปบอร์ด



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





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

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

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

0

กระทู้

1

โพสต์

6

เครดิต

Newbie

Rank: 1

เครดิต
6
โพสต์ 2019-5-29 15:19:09 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-11-28 00:37 , Processed in 0.149100 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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