简体   繁体   English

如何从 Visual Studio 将新记录添加到 Access 数据库。 (VB.NET)

[英]How to Add New Records to An Access Database from Visual Studio. (VB.NET)

Disclaimer: I'm very new into programming, so my coding skills are subpar at best.免责声明:我对编程很陌生,所以我的编码技能充其量是低于标准的。

My goal is to have my Visual Studio 2019 project ( named Detailing Error Log ) add a new record row into my Microsoft Access Database table ( accdb file named Database1 , table named Data Collection) based on which checkboxes are checked.我的目标是让我的 Visual Studio 2019 项目(名为 Detailing Error Log )根据选中的复选框将新记录行添加到我的 Microsoft Access 数据库表(名为 Database1 的 accdb 文件,名为 Data Collection 的表)中。 I would only like rows to be added, not deleted, whenever the "Import" button is clicked.每当单击“导入”按钮时,我只想添加行,而不是删除行。 The Database will then be saved and the checkboxes in my Visual Studio project unchecked.然后将保存数据库,并且取消选中我的 Visual Studio 项目中的复选框。 The Database will be used to store that data until it is used by a coordinating visual studio program to count the occurrences of specific text within a specific month.数据库将用于存储该数据,直到协调的 Visual Studio 程序使用它来计算特定月份内特定文本的出现次数。 From there it will be displayed in graphs.从那里它将以图表的形式显示。

I had successfully accomplished this using Excel, however when the file became too large it caused a great deal of lag;我已经使用 Excel 成功完成了这项工作,但是当文件变得太大时,会导致很大的延迟; both whenever I ran the debugger and also when refreshing the graphs.每当我运行调试器和刷新图形时。 I understand there will most likely be a noticeable loading time, but I would like it to be minimized.我知道很可能会有明显的加载时间,但我希望将其最小化。

My problem is that I am getting this error at my con.Open(): "System.InvalidOperationException: 'The 'Microsoft.ACE.OLEDB.12.0Data Source = S:\software\System\DPD & DEL (KPI)\Database1.accdb' provider is not registered on the local machine."我的问题是我在 con.Open(): "System.InvalidOperationException: 'The 'Microsoft.ACE.OLEDB.12.0Data Source = S:\software\System\DPD & DEL (KPI)\Database1 .accdb' 提供程序未在本地计算机上注册。”

What does this error mean?这个错误是什么意思? This is also currently the only error thrown.这也是目前唯一抛出的错误。

Here is my code for reference, thanks in advance for the help!这是我的代码供参考,在此先感谢您的帮助!

*NEATOL = "No Entry At Time Of Log" *NEATOL = "记录时无条目"

    Private Sub ConnectionPrep(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        Dim dbProvider As String
        Dim dbSource As String
        Dim sql As String
        Dim inc As Integer
        Dim MaxRows As Integer
        Dim con As New OleDb.OleDbConnection

        dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0"
        dbSource = "Data Source = S:\software\Melton System\DPD & DEL (KPI)\Database1.accdb; Persist Security Info = False"
        con.ConnectionString = dbProvider & dbSource
        con.Open()
    End Sub

    Private Sub InputInformation(sender As System.Object, e As System.EventArgs) Handles ImporttBUT.Click
        Dim con As New OleDb.OleDbConnection
        Dim ds As New DataSet
        Dim da As OleDb.OleDbDataAdapter
        Dim cb As New OleDbCommandBuilder()
        Dim dsnewrow As DataRow
        dsnewrow = ds.Tables("Data Collection").NewRow()
        dsnewrow.Item("M/Y OF LOG") = Me.MonthList2021.SelectedItem
        dsnewrow.Item("TIME OF LOG") = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss")
        dsnewrow.Item("USER") = UserName
        dsnewrow.Item("STOCK NUMBER") = Me.StockNumberTXTB.Text
        If MissedPartCHKB.Checked = True Then
            dsnewrow.Item("MISSED PART") = Me.MissedPartCHKB.Text
        ElseIf MissedPartCHKB.Checked = False Then
            dsnewrow.Item("MISSED PART") = "NEATOL"
        End If
        If NotInEpicorCHKB.Checked = True Then
            dsnewrow.Item("NOT IN EPICOR") = Me.NotInEpicorCHKB.Text
        ElseIf NotInEpicorCHKB.Checked = False Then
            dsnewrow.Item("NOT IN EPICOR") = "NEATOL"
        End If
        If MissedBuyoutCHKB.Checked = True Then
            dsnewrow.Item("MISSED BUYOUT") = Me.MissedBuyoutCHKB.Text
        ElseIf MissedBuyoutCHKB.Checked = False Then
            dsnewrow.Item("MISSED BUYOUT") = "NEATOL"
        End If
        If NonStockCHKB.Checked = True Then
            dsnewrow.Item("MISSED NON STOCK ITEM") = Me.NonStockCHKB.Text
        ElseIf NonStockCHKB.Checked = False Then
            dsnewrow.Item("MISSED NON STOCK ITEM") = "NEATOL"
        End If
        If MissedSTKItemCHKB.Checked = True Then
            dsnewrow.Item("MISSED STOCK ITEM") = Me.MissedSTKItemCHKB.Text
        ElseIf MissedSTKItemCHKB.Checked = False Then
            dsnewrow.Item("MISSED STOCK ITEM") = "NEATOL"
        End If
        If MissedAutomatedPartCHKB.Checked = True Then
            dsnewrow.Item("MISSED AUTOMATED") = Me.MissedAutomatedPartCHKB.Text
        ElseIf MissedAutomatedPartCHKB.Checked = False Then
            dsnewrow.Item("MISSED AUTOMATED") = "NEATOL"
        End If
        If MissingPrintAfterQTYCHKB.Checked = True Then
            dsnewrow.Item("MISSING PRINTS AFTER QUANTITY") = Me.MissingPrintAfterQTYCHKB.Text
        ElseIf MissingPrintAfterQTYCHKB.Checked = False Then
            dsnewrow.Item("MISSING PRINTS AFTER QUANTITY") = "NEATOL"
        End If
        If MissedPrintsNOTSentChadCHKB.Checked = True Then
            dsnewrow.Item("MISSED PRINT NOT SENT TO CHAD") = Me.MissedPrintsNOTSentChadCHKB.Text
        ElseIf MissedPrintsNOTSentChadCHKB.Checked = False Then
            dsnewrow.Item("MISSED PRINT NOT SENT TO CHAD") = "NEATOL"
        End If
        If OtherCHKB.Checked = True Then
            dsnewrow.Item("OTHER") = Me.OtherTXTB.Text
        ElseIf OtherCHKB.Checked = False Then
            dsnewrow.Item("OTHER") = "NEATOL"
        End If
        If AddedMissingDimCHKB.Checked = True Then
            dsnewrow.Item("ADDED MISSING DIMENSION") = Me.AddedMissingDimCHKB.Text
        ElseIf AddedMissingDimCHKB.Checked = False Then
            dsnewrow.Item("ADDED MISSING DIMENSION") = "NEATOL"
        End If
        If FixedDimensionCHKB.Checked = True Then
            dsnewrow.Item("FIXED DIMENSION") = Me.FixedDimensionCHKB.Text
        ElseIf FixedDimensionCHKB.Checked = False Then
            dsnewrow.Item("FIXED DIMENSION") = "NEATOL"
        End If
        ds.Tables("Counting").Rows.Add(dsnewrow)
        da.Update(ds, "Counting")
        MsgBox("Entry succesfully added to database.")

        MissedPartCHKB.Checked = False

        MissedAutomatedPartCHKB.Checked = False

        NotInEpicorCHKB.Checked = False

        NonStockCHKB.Checked = False

        MissedSTKItemCHKB.Checked = False

        MissedBuyoutCHKB.Checked = False

        MissedPrintsNOTSentChadCHKB.Checked = False

        MissingPrintAfterQTYCHKB.Checked = False

        AddedMissingDimCHKB.Checked = False

        FixedDimensionCHKB.Checked = False

        OtherCHKB.Checked = False

        OtherTXTB.Text = ""
        
      End Sub

Try this having the correct semicolons:试试这个有正确的分号:

    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
    dbSource = "Data Source=S:\software\Melton System\DPD & DEL (KPI)\Database1.accdb; Persist Security Info=False"
    con.ConnectionString = dbProvider & dbSource

Source: https://www.connectionstrings.com/access-2013/资料来源: https://www.connectionstrings.com/access-2013/

It might seem like a good idea to build your connection string that way but it's not.以这种方式构建连接字符串似乎是个好主意,但事实并非如此。 If you want to break it up then do so properly:如果你想打破它,那么正确地这样做:

Dim builder As New OleDbConnectionStringBuilder

builder.Provider = "Microsoft.ACE.OLEDB.12.0"
builder.DataSource = "S:\software\Melton System\DPD & DEL (KPI)\Database1.accdb"
builder.PersistSecurityInfo = False

Using connection As New OleDbConnection(builder.ConnectionString)
    '...
End Using

Doing it properly, you can't forget bits and pieces because there are no bits and pieces.做得好,你不能忘记点点滴滴,因为没有点点滴滴。 You just supply the values.您只需提供值。 You also won't end up putting the PersistSecurityInfo value into a variable named dbSource when it's nothing to do with the data source.PersistSecurityInfo值与数据源无关时,您也不会最终将其放入名为dbSource的变量中。 Pretending to separate your connection string components but not actually doing it properly is worse than not doing it at all.假装分离你的连接字符串组件但实际上没有正确地做它比根本不做更糟糕。

You can also simplify the code above somewhat like so:您还可以像这样简化上面的代码:

Dim builder As New OleDbConnectionStringBuilder

With builder
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .DataSource = "S:\software\Melton System\DPD & DEL (KPI)\Database1.accdb"
    .PersistSecurityInfo = False
End With

or, taking it a step further:或者,更进一步:

Dim builder As New OleDbConnectionStringBuilder With {.Provider = "Microsoft.ACE.OLEDB.12.0",
                                                      .DataSource = "S:\software\Melton System\DPD & DEL (KPI)\Database1.accdb",
                                                      .PersistSecurityInfo = False}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 Visual Studio 2019 (VB.NET) 按钮在 Access 数据库中创建新记录 - How to Create a New Record in an Access Database using Visual Studio 2019 (VB.NET) Button Click 如何通过VB.net从Visual Studio将多个ComboBox值输入到Access数据库中 - How to input multiple ComboBox values into Access Database from Visual Studio via VB.net 我如何从vb.net添加到Access数据库 - How can i add into access database from vb.net Visual Studio(vb.net)无法加载访问数据库 - visual studio (vb.net) not able to load an access database 使用Visual Studio 2015更新Access数据库-VB.net - Update Access database using Visual Studio 2015 - VB.net 如何使用VB.NET删除表中的所有数据并在Access数据库中插入新记录? - How to delete all data in table and insert new records in an Access database with VB.NET? 在VB.NET中显示Access数据库中未经检查的记录 - Display unchecked records from an Access database in VB.NET 如何使用 Visual Studio 计算 Access 数据库中的值 VB.NET - How to Count Values in Access Database using Visual Studio VB.NET Visual Studio 2015 VB.net如何在MS Access数据库中查找记录并禁用表单中的按钮? - Visual Studio 2015 VB.net How to find record in MS Access database and disable button in form? 如何使Visual Studio 2015添加带有名称空间声明的新VB.NET类? - How can I make Visual Studio 2015 add a new VB.NET class with a namespace declaration?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM