【问题标题】:Need Help on 3 Table Relations Ms access and Vb.Net在 3 表关系 Ms 访问和 Vb.Net 上需要帮助
【发布时间】:2016-02-09 01:42:04
【问题描述】:

我在 ms 访问中创建了 3 个表,其中 Table Person 是唯一一个包含主键 TABLE PERSON(ID,FNAME,MNAME,LNAME) 的表,我将它连接到 2 个 TABLES AMOUNT(ID,amount,Term )TABLE TIME(ID,start,due)

时间表和id表没有PK,ID格式都是数字。

当我尝试使用 Vb.Net 在我的数据库中添加数据时,它会显示此错误 You cannot add or change a record because a related record is required in table 'P'.

这是整个代码:

 Public Function insert_person(ByVal fname As String, ByVal mname As String, ByVal lname As String)
        Dim connect As OleDbConnection = con()
        Dim cmd As OleDbCommand = connect.CreateCommand()
        cmd.CommandText = "insert into P(fname,mname,lname)values(fname,mname,lname)"
        cmd.Parameters.Add("@fname", OleDbType.VarChar).Value = fname
        cmd.Parameters.Add("@mname", OleDbType.VarChar).Value = mname
        cmd.Parameters.Add("@lname", OleDbType.VarChar).Value = lname
        cmd.ExecuteNonQuery()
        connect.Close()
        Return 0
    End Function

    Public Function insert_amount(ByVal empid As Integer, ByVal amount As Double, ByVal term As Integer)
        Dim connect As OleDbConnection = con()
        Dim cmd As OleDbCommand = connect.CreateCommand()
        cmd.CommandText = "insert into A(empid,amount,term) values(@empid,@amount,@term)"
        cmd.Parameters.Add("@empid", OleDbType.Integer).Value = empid
        cmd.Parameters.Add("@amount", OleDbType.Double).Value = amount
        cmd.Parameters.Add("@term", OleDbType.Integer).Value = term
        cmd.ExecuteNonQuery()
        connect.Close()
        Return 0
    End Function

当我检查我的数据库以查看记录是否已保存时,唯一保存的记录是 TABLE P TABLE amount TABLE time 不要添加任何内容

【问题讨论】:

  • 为什么严格的编译器选项设置为Off 以及为什么将所有内容都存储为String aka。 varchar 在数据库中?
  • 您没有为 P 表中的 ID 字段添加值。这意味着此 ID 是自动编号,每次添加记录时都会从 Access 自动生成。要取回该值并在其他插入查询中使用它(您必须知道与您的数量和时间数据相关的人的 ID),您应该在第一个查询中关闭连接之前执行另一个命令。选择@@IDENTITY
  • 1.您的关系屏幕与您的代码不匹配 - A.empid 在哪里? -- 2. 同样,您需要发布调用您的insert_* 函数的代码。
  • 找到答案现在感谢大家提出我的最后一个问题,我目前正在构建我的登录表单,我可以使用 DataGridView 登录。我想要实现的是,当我获得正确的用户帐户并被转移到另一个表单时,我希望将这些属性转换为类似于迷你配置文件的文本。无需从 DGV 中选择任何内容

标签: vb.net ms-access insert database-relations


【解决方案1】:
  1. insert_amount 中有语法错误:
cmd.Parameters.Add(New OleDbParameter(CType("[empid]"
  1. time 是 Access 中的 reserved word,您应该以不同的方式命名此表。

  2. 每个表都应该有一个主键。没有你会遇到各种各样的问题。

  3. 您收到的错误消息意味着您与P 和其他表之间的Referential Integrity 有关系。您需要传递并插入一个存在于P 中的empid

【讨论】:

  • 我怎样才能将 empid 传递给其他表呢?我所做的只是 Dim i 作为 Integer 将 i 作为参数传递给 insert_time 函数如何将 P 的 PK 传递给其他表?
  • @IvanMiguelAntonioLorenzo:见史蒂夫的评论。您应该发布调用您的 insert_* 函数的代码以获得更多帮助。
  • 添加了我的访问权限的关系,看看它,我的目标是一起执行它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
相关资源
最近更新 更多