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