Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
赢得的价值';在VB.Net中插入后不追加_Vb.net_Ms Access - Fatal编程技术网

赢得的价值';在VB.Net中插入后不追加

赢得的价值';在VB.Net中插入后不追加,vb.net,ms-access,Vb.net,Ms Access,我一直在网上四处寻找,但仍然找不到答案。我有一组代码,当然可以将数据插入Access数据库。它工作得很好,但是,每当我们添加一个新数据时,它不会追加,但会替换以前插入的数据(如果我说得通的话)。我不确定什么地方可能出错或遗漏 以下是完整的代码: Imports System.Data Imports System.Data.OleDb Public Class addRecords Dim con As New OleDbConnection("Provider=Micros

我一直在网上四处寻找,但仍然找不到答案。我有一组代码,当然可以将数据插入Access数据库。它工作得很好,但是,每当我们添加一个新数据时,它不会追加,但会替换以前插入的数据(如果我说得通的话)。我不确定什么地方可能出错或遗漏

以下是完整的代码:

Imports System.Data
Imports System.Data.OleDb
Public Class addRecords

    Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\createReacord.accdb")
    Dim i
    Private Sub addrec_Click(sender As Object, e As EventArgs) Handles addrec.Click
        Try
            Dim sql As String
            Dim cmd As New OleDb.OleDbCommand
            con.Open()
            sql = "INSERT INTO record (studno, lname, fname, mname, dept, prog, yrlvl) 
values ('" & studno.Text & "','" & lname.Text & "', '" & fname.Text & "', '" & mname.Text & "', '" & dept.Text & "', '" & prog.Text & "', " & Val(year.Text) & ");"
            cmd.Connection = con
            cmd.CommandText = sql
            i = cmd.ExecuteNonQuery
            If i > 0 Then
                MsgBox("Record saved.")
                studno.Clear()
                lname.Clear()
                fname.Clear()
                mname.Clear()
                dept.ResetText()
                prog.ResetText()
                year.ResetText()

            Else
                MsgBox("No record save.")
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            con.Close()
        End Try



    End Sub

    Private Sub dept_SelectedIndexChanged(sender As Object, e As EventArgs) Handles dept.SelectedIndexChanged
        If dept.SelectedIndex = 0 Then
            prog.Items.Clear()
            prog.Items.AddRange({"BMMA", "BSPsych", "BAComm"})

        ElseIf dept.SelectedIndex = 1 Then
            prog.Items.Clear()
            prog.Items.AddRange({"BSIT", "BSCS", "BSIS"})

        ElseIf dept.SelectedIndex = 2 Then
            prog.Items.Clear()
            prog.Items.AddRange({"BSA", "BSBA", "BSTM", "BSEnt"})

        ElseIf dept.SelectedIndex = 3 Then
            prog.Items.Clear()
            prog.Items.AddRange({"BSArch", "BSChE", "BSCE", "BSCpE", "BSEE", "BSEcE", "BSIE", "BSME"})

        ElseIf dept.SelectedIndex = 4 Then
            prog.Items.Clear()
            prog.Items.AddRange({"BSMarE", "BSMT"})


        End If
    End Sub
End Class
编辑


好的,如果在同一次运行中,它会附加数据。但是,如果我重新运行该项目,它将覆盖以前的数据。这有意义吗?

你认为正在发生的事情几乎肯定不会发生。许多人不知道本地数据文件在VS中是如何工作的,他们对这种明显的行为感到困惑

将数据文件添加到项目中时,它与其他源文件一起存储在项目文件夹中。生成项目时,该源数据文件将与EXE一起复制到输出文件夹,并且调试时所针对的正是该副本。未对原始文件进行任何更改

默认情况下,每次生成项目时,都会将原始源文件复制到测试文件的顶部。这意味着您在以前的测试中所做的任何更改都将丢失。如果插入一条记录,退出应用程序,更改代码,然后再次运行项目,插入的数据将丢失,因此插入另一条记录看起来就像替换了前一条记录


解决方案通常是简单地更改在每个构建上复制的默认行为。在解决方案资源管理器中选择数据文件,并将
Copy to output directory
属性设置为
Copy if newer
,而不是
Copy always
。这样,只有在对源文件进行了更改后,测试文件才会被覆盖。然后,您可以在多个调试会话中保留更改。如果要在不更改源文件的情况下刷新输出文件夹中的副本,只需删除副本并重新生成,或者临时将该属性更改回
copy always

我理解您的意思,但这没有意义:
INSERT INTO
从不覆盖数据。您是否确定始终使用完全相同的accdb文件(并且不要将其覆盖或意外部署为构建过程的一部分)?我的理解是,
INSERT-INTO
不会覆盖数据。但要回答你的问题,是的。这是保存在Bin\Debug文件夹下的同一个accdb文件。我将尝试录制一段录音,让你们看。旁注,始终使用参数来防止SQLi。@zaggler注意到了。但这不是我的。我正在帮助一位朋友的项目,除了与他们讨论的内容外,我不能使用其他参数。(旁注:她是一名企业家学生,因此她对其他事情一无所知)哦,天哪,天哪。这很有效。令人惊叹的。