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

Posted

技术标签:

【中文标题】如何在 MS Access VBA 上将文本框注释值输入设置为表格数据插入【英文标题】:How to set TextBox Comment Value Input as Table Data Insert on MS Access VBA 【发布时间】:2018-10-11 15:27:28 【问题描述】:

我有一个主要的“最终表格”正在通过 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

当我从主表插入点中删除“注释”和代码的“strComment AS 注释”部分时,代码工作正常。否则我得到运行时错误'3061',参数太少。预计 1。

问题:我有没有办法将要插入到数据库中的文本框值标注为所有要添加的数据的字段数据,或者我应该使用其他方法来执行此操作吗?

决赛桌示例:

【问题讨论】:

strComment 是窗体上控件的名称吗?如果是这样,则不能在这样的 SQL 字符串中引用它。我建议创建一个临时 QueryDef,为该列添加一个参数,然后将表单控件值分配给该 QueryDef 参数。 “order”这个词也是一个SQL保留字,如“ORDER BY”,可能需要像“[Order]”一样分隔。 您真的想要添加两个源表而不需要连接吗?当前代码将生成两个表 001_SelectedMonth001_OrderTable 中所有行的笛卡尔积。 @CPerkins “订单”只是一个例子,我避免使用我目前在代码中使用的术语。还是谢谢。 【参考方案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;"

也就是说,使用参数来避免串联。

【讨论】:

这违背了避免 SQL 注入的常见建议。我不像某些人那么挑剔——尤其是在本来就很不安全的 Access 中——但我因为建议这种类型的代码而被“打脸”了很多次。 @Gustav,这实际上解决了我的问题。感谢您的帮助! @CPerkins:是的。厌倦了直接回答问题而受到抨击,我通常包括免责声明,即参数应该是首选。我几乎自始至终都使用参数,但有时连接既方便又完全安全。这里可能不是这样,但我们不知道TextBox_Comment通过了什么级别的验证。 @Gustav 我并不想抨击你的答案,因此我试图简单地“传递信息”,这是我几年前经常收到的。我很惊讶我是唯一一个发声的人。至少在当时,大胆而直接地鼓励安全的编程习惯只是文化的一部分。我还记得当更多的用户实际上试图坚持鼓励对问题提供高质量答案的标准时。似乎越来越多(至少在 Access 中)答案只是对研究不足的问题的快速解决方案。 @CPerkins:我同意。通常,就像这里一样,“为什么我的代码失败”有一个直接的答案。我可以在几秒钟内写下那个答案,而冗长且有教育意义的替代答案和解释可能需要更长的时间——我通常没有时间,因为实际工作优先。当然,等我退休了,情况可能会变……

以上是关于如何在 MS Access VBA 上将文本框注释值输入设置为表格数据插入的主要内容,如果未能解决你的问题,请参考以下文章

将 VBA 用于 MS Access 2000 文本框的控制源

MS ACcess 使文本框在按钮单击时可见

MS Access VBA,只有在所有必需的文本框都包含有效数据后才启用按钮的有效方法

MS Access VBA 调用子程序在第一遍有效,但在第二遍无效

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

如何更新 ms access vba 中的多值组合框?