如何在 Access VBA 中运行附加查询以根据表单字段中的数量创建一定数量的相同记录?
Posted
技术标签:
【中文标题】如何在 Access VBA 中运行附加查询以根据表单字段中的数量创建一定数量的相同记录?【英文标题】:How do I run an append query in Access VBA to create a certain number of identical records based on a quantity in a field on the form? 【发布时间】:2020-01-02 03:37:13 【问题描述】:首先感谢您提供的任何帮助。
下面是我正在使用的附加查询 - 直截了当。在我提取引用的值的同一个表单上,有一个包含数量的字段。我希望引用这个数量来执行这个附加查询的次数。如果字段中的数量是 6,那么我希望追加查询运行 6 次。我知道这将是一个循环,但我生疏了,我在堆栈或网络上的其他地方找不到任何明确的例子。
再次感谢,
肖恩
到目前为止的代码:
Private Sub Command20_Click()
Dim strSQL As String
'*****Append record to table*****
strSQL = "INSERT INTO tblStructuresNoDAworking (StructName, State, Brand, Flavor_Sub, _
Type, Size, Bottles_Case, Entry_Date) VALUES ('" & Me.Text90 & "','" & Me.Text26 _
& "','" & Me.Text28 & "','" & Me.Text30 & "','" & Me.Text91 & "','" & Me.Text92_
& "','" & Me.Text93 & "', '" & Now() & "')"
DoCmd.RunSQL (strSQL)
End Sub
【问题讨论】:
【参考方案1】:首先,您应该将控件命名为有意义的名称。
第二,Now 不应该像你一样先转换成文本再转换成日期。直接插入:
& "','" & Me.Text93 & "', Now())"
然后,在 DAO 中使用循环会更快更干净。请参阅此处的示例:
Insert multiple records with a date range in MS Access
您可以轻松采用 Me.ComboDeal.Value
进行循环。
【讨论】:
感谢控件名称的提示、链接和 Now() 上的更正。【参考方案2】:想通了。缩短了字段的数量以便于测试。
Private Sub Command20_Click()
DoCmd.SetWarnings False
Dim strSQL As String
'Define Loop Count
Dim I As Integer
For I = 1 To Me.ComboDeal.Value
'**Append record to table**
strSQL = "INSERT INTO tblStructuresNoDAworking (Structure_Name) _
VALUES ('" & Me.Combo121 & "')"
DoCmd.RunSQL (strSQL)
Next I
DoCmd.SetWarnings True
End Sub
【讨论】:
为了好玩,将 Combobox 的值设置为包含引号'
的字符串。那 ts 称为 SQLInjection 并且可能会造成很大的麻烦!。如果您需要创建动态查询,请使用参数,! Thwy 还可以避免格式问题(例如日期)来使用必须使用 DAO 或 Adodb 连接的参数。避免使用 DoCmd.f.。请注意,您可以一次使用一个语句对多行进行离子插入,但通常记录集的插入速度更快。但是为什么需要插入同一个 vaue 多个定时器呢?这闻起来像是糟糕的标准化。
@ComputerVersteher 感谢您提供的信息,我会牢记这一点。我已经有很长一段时间没有从事一个项目了,并被要求看看我能想出什么。为这些字段多次插入相同的值,但是用户将通过弹出表单手动更改其他字段。这些字段将始终包含相同的值,而其他字段可能会更改。以上是关于如何在 Access VBA 中运行附加查询以根据表单字段中的数量创建一定数量的相同记录?的主要内容,如果未能解决你的问题,请参考以下文章
关闭使用附加查询打开的 MS Access laccdb 文件
如何在 Access 中进行查询将 tempvar 识别为有效字段(参数)
在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA