将数据插入关系表
Posted
技术标签:
【中文标题】将数据插入关系表【英文标题】:Insert Data Into Relational tables 【发布时间】:2014-01-18 08:58:08 【问题描述】:我已经制作了关系表的数据库,表的访问关系如下图
当我尝试使用以下查询向表中插入数据时
qrY = "INSERT INTO `reg_table` (`Regn_ID`, `Full_name`, `Addr`, `City`, `PIN Code`, `Email`, `Contact_No`, `Fee`, `payment_type`, `checkordraft_No`, `regn_Date`, `conTctID`) VALUES "
qrY += "(NULL, "
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'12312',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'18-04-2014',"
qrY += "'1'"
qrY += " )""
它给了我错误“您试图将 Null 值分配给不是 Variant 数据类型的变量。”我不知道错误是什么以及如何解决,所以请给我任何解决方案。 . . .
或者只是告诉它是因为关系表或数据类型错误而导致的
【问题讨论】:
任何解决方案:阅读 ms 访问支持的列类型,并始终使用参数(任何 ado.net 示例都应该有这些),而不是查询值的字符串连接。 Regn_ID 是自动编号字段吗? 是的@Steve,它是自动增量 然后不要给它设置任何值,把字段列表中的字段名去掉。自动编号由数据库代码直接生成,您不应尝试将其设置为任何值 @Steve 你试过我的解决方案了吗 【参考方案1】:Regn_ID 是导致错误的自动递增字段。
这样试试
qrY = "INSERT INTO `reg_table` (`Full_name`, `Addr`, `City`, `PIN Code`, `Email`, `Contact_No`, `Fee`, `payment_type`, `checkordraft_No`, `regn_Date`, `conTctID`) VALUES "
qrY += "('Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'12312',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'Bb',"
qrY += "'18-04-2014',"
qrY += "'1'"
qrY += " )""
【讨论】:
【参考方案2】:如果 Regn_ID 是自动编号,则不要为其设置任何值并删除字段列表中的字段名称。自动编号由数据库代码直接生成,您不应尝试将其设置为任何值。
但是我认为您的代码还有其他问题,因为您不应该在需要整数或日期的地方传递字符串。
正确的语法应该是这样的
qrY = "INSERT INTO reg_table (Full_name, Addr, City, PIN Code, Email, Contact_No," & _
"Fee, payment_type, checkordraft_No, regn_Date, conTctID) VALUES " & _
"'Bb','Bb','Bb',12312,'Bb','Bb','Bb','Bb','Bb',#18-04-2014#,1)"
但这仍然可能是不正确的,因为我真的猜不出 Pin_Code、Contact_No、Fee、payment_type、checkordraft_No 的数据类型是什么。如果它们不是字符串,则不要将值括在单引号中。
但是,这个示例确实是人为的,因为您传递了测试值,但在实际工作场景中,您有值的变量,并且您需要使用参数化查询方法,其中每个参数都应设置为数据库所需的正确数据类型。
【讨论】:
但是regn_date是数据库中的字符串?【参考方案3】:Steve 和 Vignesh 的解决方案是正确的,但我还要补充一点,您永远不能将主键设置为 NULL。
【讨论】:
以上是关于将数据插入关系表的主要内容,如果未能解决你的问题,请参考以下文章