ผู้เขียน หัวข้อ: [VB.Net] นำข้อมูลจาก Excel บันทึกเข้าสู่ MS Access (2007)  (อ่าน 198 ครั้ง)

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
[VB.Net] นำข้อมูลจาก Excel บันทึกเข้าสู่ MS Access (2007)

เอาล่ะครับเรามาว่ากันต่อครับท่านผู้ชม ... จากตอนที่ 1 และตอนที่ 2 ก็เป็นการนำข้อมูลจาก Excel มาแสดงผลในตารางกริดทั้งแบบ Bound และ UnBound Control ซึ่งหลายท่านก็คงจะได้เห็นถึงความแตกต่าง และวิธีการนำไปใช้แล้ว คราวนี้จะเป็นการนำข้อมูลจาก DataGridView ไปเก็บไว้ที่ MS Access กันล่ะครับ ...


เลือก WorkSheet ที่ต้องการ


การออกแบบ (Design) ตารางข้อมูล ... สิ่งที่จำเป็นก็คือเรื่องของ Primary Key สำหรับทุกๆตารางข้อมูลต้องมีไว้เสมอ


บันทึกข้อมูลลงในตารางของ MS Access

มาดูโค้ดกันเถอะ
โค๊ด: [Select]
' / -----------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: www.facebook.com/g2gnet
' / Purpose: Load data from MS Excel into DataGridView Control
' / and Save data into MS Access 2007.
' / Microsoft Visual Basic .NET (2010) and MS Excel 2007
' / -----------------------------------------------------------------------------
Imports System.Data.OleDb

Public Class frmExcel2Access

    ' / ------------------------------------------------------------------
    ' / เลือกไฟล์ MS Excel
    ' / ------------------------------------------------------------------
    Private Sub btnBrowse_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowse.Click
        ' ประกาศใช้งาน Open File Dialog ในแบบ Run Time
        Dim dlgOpenFile As OpenFileDialog = New OpenFileDialog()

        ' / ตั้งค่าการใช้งาน Open File Dialog
        With dlgOpenFile
            .InitialDirectory = MyPath(Application.StartupPath)
            .Title = "เลือกไฟล์ MS Excel"
            .Filter = "MS Excel Files (*.xlsx;*.xls)|*.xlsx;*xls"
            .FilterIndex = 1
            .RestoreDirectory = True
        End With
        ' หากเลือกปุ่ม OK หลังจากการ Browse ...
        If dlgOpenFile.ShowDialog() = DialogResult.OK Then
            txtFileName.Text = dlgOpenFile.FileName
            Dim strConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
                dlgOpenFile.FileName & "; Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
            Dim Conn As New OleDbConnection(strConn)
            Conn.Open()
            ' มอง WorkSheet ให้เป็นตารางข้อมูล (Table)
            Dim dtSheets As DataTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            Dim drSheet As DataRow

            cmbSheetName.Items.Clear()
            ' นำรายชื่อ WorkSheet ทั้งหมด มาเก็บไว้ที่ ComboBox เพื่อรอให้ User เลือกนำไปใช้งาน
            For Each drSheet In dtSheets.Rows
                cmbSheetName.Items.Add(drSheet("TABLE_NAME").ToString())
            Next
            Conn.Close()
        End If

    End Sub

    ' / ------------------------------------------------------------------
    ' / เลือก WorkSheet ที่ต้องการแล้วนำมาแสดงผลใน DataGridView
    ' / ------------------------------------------------------------------
    Private Sub cmbSheetName_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbSheetName.SelectedIndexChanged
        Dim Conn As OleDbConnection
        Dim Comm As OleDbCommand
        Dim DAP As OleDbDataAdapter
        Dim DS As DataSet

        Dim strConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
            txtFileName.Text & "; Extended Properties=""Excel 12.0 Xml; HDR=YES"";"
        Try
            Conn = New OleDbConnection
            Conn.ConnectionString = strConn
            Comm = New OleDbCommand
            ' เสมือน WorkSheet เป็น Table ในฐานข้อมูล
            Comm.CommandText = "Select * FROM [" & cmbSheetName.Text & "]"
            Comm.Connection = Conn
            DAP = New OleDbDataAdapter(Comm)
            DS = New DataSet
            Conn.Open()
            DAP.Fill(DS, "Sheet1")
            ' ผูกข้อมูล (Bound Data) เข้ากับ Sheet1
            dgvProvince.DataSource = DS.Tables("Sheet1")

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            Conn = Nothing
            Comm = Nothing
            DAP = Nothing
            DS = Nothing
        End Try
    End Sub

    ' / ------------------------------------------------------------------
    ' / นำข้อมูลจาก DataGridView บันทึกเข้าสู่ MS Access 2007
    ' / ------------------------------------------------------------------
    Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
        If dgvProvince.Rows.Count <= 0 Then Exit Sub

        Dim Conn As OleDbConnection
        Dim Comm As OleDbCommand
        Dim Statement As String

        Dim strConn As String = _
            " Provider=Microsoft.ACE.OLEDB.12.0;" & _
            " Data Source = " & MyPath(Application.StartupPath) & "ProvinceData.accdb; " & _
            " Persist Security Info=False;"
        Try
            'Opening the connection
            Conn = New OleDb.OleDbConnection(strConn)
            Conn.Open()
            ' / ลบข้อมูลเดิมออกให้หมด
            Statement = "DELETE * FROM ProvinceData "
            Comm = New OleDbCommand(Statement, Conn)
            Comm.ExecuteNonQuery()

            ' / เก็บค่า Primary Key
            Dim iRow As Integer = 1
            ' / Collection of rows in the DataGridView control
            For Each row As DataGridViewRow In dgvProvince.Rows
                ' / Store query to a variable(sql)
                Statement = "INSERT INTO ProvinceData (ProvincePK, ProvinceName, ShortThai, ShortEng) VALUES ('" _
                            & iRow & "','" _
                            & CStr(row.Cells(0).FormattedValue) & "','" _
                            & CStr(row.Cells(1).FormattedValue) & "','" _
                            & CStr(row.Cells(2).FormattedValue) & "')"
                'Set your SQL COMMANDS
                Comm = New OleDbCommand(Statement, Conn)
                ' / Execute the Data
                Comm.ExecuteNonQuery()
                ' / Next row
                iRow = iRow + 1
            Next
            MessageBox.Show("Save change complete.")
            Comm = Nothing
            Conn.Close()
            Conn = Nothing
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub frmExcel2DataGrid_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Dispose()
        Application.Exit()
    End Sub

    ' / ------------------------------------------------------------------
    ' / ฟังค์ชั่นที่เราสามารถกำหนด Path ให้กับโปรแกรมของเราเอง
    ' / Ex.
    ' / AppPath = C:\My Project\bin\debug
    ' / Replace "\bin\debug" with "\"
    ' / Return : C:\My Project\
    Function MyPath(AppPath As String) As String
        AppPath = AppPath.ToLower()
        MyPath = AppPath.Replace("\bin\debug", "\")
    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) ได้ที่นี่

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

ออฟไลน์ Mr.Den

  • Jr. Member
  • **
  • กระทู้: 73
  • เพศ: ชาย
Re: [VB.Net] นำข้อมูลจาก Excel บันทึกเข้าสู่ MS Access (2007)
« ตอบกลับ #1 เมื่อ: เมษายน 22, 2016, 07:23:10 pm »
ขอบคุณครับ...
อาจารย์มีแนวคิด(ตัวอย่างฮ่าๆ) อ่าน textfile รูดบัตรพนักงาน ไปเก็บไว้ให้ตรงกับ เวลาเข้ากะพนักงานบ่ครับ (ไม่รู้ถามถูกหรือเปล่า?)

บันทึกการเข้า

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
Re: [VB.Net] นำข้อมูลจาก Excel บันทึกเข้าสู่ MS Access (2007)
« ตอบกลับ #2 เมื่อ: เมษายน 22, 2016, 07:27:16 pm »
ขอบคุณครับ...
อาจารย์มีแนวคิด(ตัวอย่างฮ่าๆ) อ่าน textfile รูดบัตรพนักงาน ไปเก็บไว้ให้ตรงกับ เวลาเข้ากะพนักงานบ่ครับ (ไม่รู้ถามถูกหรือเปล่า?)

ตอนนี้กำลังรอเครื่องสแกนลายนิ้วมือจากมิตรรักแฟนคลับ VB6 ท่านหนึ่งส่งมาให้ทดสอบอยู่ครับ โปรดอดใจรอ ...

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

ออฟไลน์ Mr.Den

  • Jr. Member
  • **
  • กระทู้: 73
  • เพศ: ชาย
Re: [VB.Net] นำข้อมูลจาก Excel บันทึกเข้าสู่ MS Access (2007)
« ตอบกลับ #3 เมื่อ: เมษายน 23, 2016, 09:24:47 am »
 21/04/2016 07:52:02      100106
 21/04/2016 12:00:18      100106
 21/04/2016 12:50:18      100106
 21/04/2016 17:00:31      100106
 21/04/2016 07:51:58      200001
 21/04/2016 12:06:42      200001
 21/04/2016 17:03:38      200001
 21/04/2016 17:13:42      200001
 21/04/2016 20:01:11      200001
รายการ text File รูปแบบนี้ แล้ว พนง.มีเวลา กะทำงาน เข้า-พัก-เข้า-เลิก-เข้า-ออกOT
ต้องเอาเวลานี้ไปใส่ในช่องกะครับ ฮ่าๆๆ

รอได้ตลอดครับผม ขอบคุณครับ.

บันทึกการเข้า