Ms access 如何在MS Access VBA上将文本框注释值输入设置为表数据插入

Ms access 如何在MS Access VBA上将文本框注释值输入设置为表数据插入,ms-access,vba,Ms Access,Vba,我有一个主要的“最终表格”,通过VBA根据表格和其他表格数据的许多输入进行更新。我试图将表单中存在的TextBox对象值标注到VBA代码中,以便用户可以向插入到最终表中的所有数据添加注释 Dim strComment As String strComment = TextBox_Comment.Value strSQL = "INSERT INTO Main_Table (Period, Monthp, Order, Comment)" strSQL = strSQL & "SELEC

我有一个主要的“最终表格”,通过VBA根据表格和其他表格数据的许多输入进行更新。我试图将表单中存在的TextBox对象值标注到VBA代码中,以便用户可以向插入到最终表中的所有数据添加注释

Dim strComment As String
strComment = TextBox_Comment.Value

strSQL = "INSERT INTO Main_Table (Period, Monthp, Order, Comment)"
strSQL = strSQL & "SELECT ""Weekly"" AS Period, [001_SelectedMonth].Monthp, [001_OrderTable].Order, strComment AS Comment FROM 001_SelectedMonth, 001_OrderTable;"

CurrentDb.Execute strSQL, dbFailOnError
当我从主表插入点删除“Comment”和代码的“strComment AS Comment”部分时,代码运行良好。否则会出现运行时错误“3061”,参数太少。预期1

问题:是否有方法调用要插入数据库中的文本框值,作为所有添加数据的字段数据,或者是否应使用其他方法执行此操作

最终表格示例:


您需要一个空格和适当的连接:

strSQL = "INSERT INTO Main_Table ([Period], Monthp, [Order], [Comment]) "
strSQL = strSQL & "SELECT 'Weekly' AS [Period], [001_SelectedMonth].Monthp, [001_OrderTable].Order, '" & strComment & "' AS [Comment] FROM 001_SelectedMonth, 001_OrderTable;"

也就是说,使用参数来避免连接。

strComment
窗体上控件的名称吗?如果是这样,则不能在这样的SQL字符串中引用它。我建议创建一个临时QueryDef,为该列添加一个参数,然后将表单控制值分配给该QueryDef参数。单词“order”也是一个SQL保留字,与“order BY”一样,可能需要像“[order]”一样进行分隔。您真的希望添加两个源表而不进行连接吗?当前代码将生成两个表中所有行的笛卡尔积
001\u SelectedMonth
001\u OrderTable
@CPerkins“Order”只是一个示例,我避免在代码中使用当前使用的术语。无论如何,谢谢。这违背了避免SQL注入的一般建议。我不像某些人那样挑剔——特别是在本来就不安全的Access中——但我已经被“扇了耳光”,因为我建议使用这种类型的代码。@Gustav,这实际上解决了我的问题。谢谢你的帮助@是的。厌倦了直接回答问题而被抨击,我通常会声明参数应该是首选的。我几乎自始至终都在使用参数,但有时连接既方便又完全安全。这里的情况可能不是这样,但我们不知道通过了什么级别的验证
TextBox\u Comment
。@Gustav我不是想抨击你的答案,因此我试图简单地“传递几年前经常收到的信息”。我很惊讶,我是唯一一个吹牛的人。至少在那个时候,大胆而直接地鼓励安全编程习惯只是文化的一部分。我还记得,当更多的用户实际上试图坚持鼓励高质量问题答案的标准时。似乎越来越多的人(至少在有了访问权限的情况下)认为答案只是对研究不足的问题的快速解决办法。@CPerkins:我同意。通常,就像这里一样,“为什么我的代码失败”有一个直接的答案。我可以在几秒钟内写出答案,而一个冗长而有教育意义的备选答案和解释可能需要更长的时间——我通常没有,因为真正的工作有优先权。当然,当我退休时,情况可能会改变。。。