Доступ к значению обновления VBA в массиве? - PullRequest
0 голосов
/ 18 января 2019

У меня проблема с проектом, над которым я работаю, и обновляю строку в массиве при запуске цикла.

Чтобы обеспечить небольшой контекст, код предназначен для исправления ошибок, которые пользователь мог совершить при вводе информации, и для обновления всех связанных таблиц за один раз.

Option Compare Database
Dim Var1 As Variant, SQL_select As Variant, SQL_update As Variant, newVar1 As String
Dim j As Integer, rsField As Variant, n As Variant

Public Sub amendCust_control()
  Dim db As Database, rs As Recordset, cntRec As Integer, i As Integer, SQL_s As String, SQL_u As String

  For j = 0 To 3
    Var1 = Forms!mm_amendcustomer_temp!Var1
    newVar1 = Forms!mm_amendcustomer_temp!Text50

    assSelArray
    SQL_s = SQL_select(j)
    Set db = CurrentDb
    Set rs = db.OpenRecordset(SQL_s)

    If rs.EOF Then
      cntRec = 0
    Else
      rs.MoveLast
      cntRec = rs.RecordCount
    End If

    If cntRec > 0 Then
      ReDim n(0 To (cntRec - 1))
      rs.MoveFirst
      For i = 0 To (cntRec - 1)
        n(i) = rs.Fields(rsField(j))
        assignSQLuparray 'populates update field with current value of n(j)
        SQL_u = SQL_update(j)
        Set SQL_update = Nothing
        rs.MoveNext
      Next i
    Else
      Exit Sub
    End If

    Set rs = Nothing
    Set db = Nothing
  Next j

  Set rs = Nothing
  Set db = Nothing
End Sub

Затем я разделил свои три строковых массива между 2 подпрограммами, как показано ниже.

Private Sub assSelArray()
  SQL_select = Array(("SELECT [Var1] FROM [Customer] WHERE [Var1] = '" & Var1 & "'"), _
    ("SELECT [transNo] FROM [Transactions] WHERE [Var1] = '" & Var1 & "'"), _
    ("SELECT [VAR_O] FROM [Overpayment] WHERE [Var1] = '" & Var1 & "'"), _
    ("SELECT [Access ID] FROM [Audit History] WHERE [Var1] = '" & Var1 & "'"))
  rsField = Array("Var1", "transNo", "VAR_O", "[Access ID]")
End Sub

Это массив, с которым я испытываю затруднения, так как значения n (i) не обновляются при каждой итерации кода, т. Е. Когда n (i) меняет значение в основной подпрограмме, оно не делает этого в массиве.

Private Sub assignSQLuparray()
  SQL_update = Array(("UPDATE [Customer] SET Var1 = '" & newVar1 & "' WHERE Var1 = '" & n(i) & "'"), _
  ("UPDATE [Transactions] SET Var1 = '" & newVar1 & "' WHERE transNo = '" & n(i) & "'"), _
  ("UPDATE [Overpayment] SET Var1 = '" & newVar1 & "' WHERE VAR_O = '" & n(i) & "'"), _
  ("UPDATE [Audit History] SET Var1 = '" & newVar1 & "' WHERE [Access ID] = '" & n(i) & "'"))
End Sub

Я надеялся, что кто-то сможет помочь мне «обновить» значения массива перед их вызовом. Помогите?

Вывод был таким, как показано ниже:

n(0) = 5 
UPDATE [Audit History] SET Var = newVar1 WHERE [Access ID] = '5'

n(1) = 6 
UPDATE [Audit History] SET Var = newVar1 WHERE [Access ID] = '5'

n(2) = 7 
UPDATE [Audit History] SET Var = newVar1 WHERE [Access ID] = '5'

n(3) = 8 
UPDATE [Audit History] SET Var = newVar1 WHERE [Access ID] = '5'

n(4) = 11 
UPDATE [Audit History] SET Var = newVar1 WHERE [Access ID] = '5'

Обратите внимание, что идентификатор доступа не меняется, как это должно быть на n (от 0 до 4).

...