【问题标题】:Using array for shorter code使用数组来缩短代码
【发布时间】:2018-08-22 03:23:27
【问题描述】:

我有同一行重复很多次,只是做了一些小改动。我喜欢通过使用对象数组来缩短它

例如,代替这段代码:

StartUpdateStr = "Update tblAfterSale SET "
EndUpdateStr = " WHERE IDAfterSale = "
IDAfterSale = Me.lblIDAfterSale.Caption

db.Execute StartUpdateStr & "Data1 = " & Me.Lable1.Caption & EndUpdateStr & IDAfterSale
db.Execute StartUpdateStr & "Data2 = " & Me.Lable2.Caption & EndUpdateStr & IDAfterSale
db.Execute StartUpdateStr & "Data3 = " & Me.Lable3.Caption & EndUpdateStr & IDAfterSale
db.Close

我正在寻找这样的东西:

Const dCaption = "Me.Lable1.Caption,Me.Lable2.Caption,Me.Lable3.Caption"
Public d(2) As Integer

Public Sub MyMacro()
    Dim vntTemp As Variant
    Dim intIndex As Integer
    vntTemp = Split(lCaption, "d")

    For intIndex = 0 To 2
        db.Execute StartUpdateStr & "Data"& intIndex &  " = " & d(intIndex) & EndUpdateStr & IDAfterSale
    Next
End Sub

谁能给我写出正确的语法? 谢谢

【问题讨论】:

  • 您可以在单个查询中更新多个列:update T set a=1, b=2, c=3 where ...,因此无需 3 次访问数据库。您应该使用参数化插入来避免注入漏洞。

标签: arrays vba ms-access


【解决方案1】:

您可以使用 Me("Label" & i) 简单地按名称访问标签

For intIndex = 0 To 2
    db.Execute StartUpdateStr & "Data" & intIndex &  " = " _
        & Me("Label" & (intIndex + 1)).Caption _
        & EndUpdateStr & IDAfterSale
Next

【讨论】:

    【解决方案2】:

    我想您将来会添加许多标签。那么你可以使用下面的代码吗

    Private Sub PrintAllLabel()
         For Each ctl In Me.Controls
             If TypeName(ctl) = "Label" Then
                  db.Execute StartUpdateStr & "Data" & intIndex &  " = " _
                  & ctl.Caption _
                  & EndUpdateStr & IDAfterSale
             End If
         Next ctl
     End Sub
    

    【讨论】:

    • 谢谢大家。所有 3 个 cmets 都对我有帮助 :) 我的代码现在好多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多