Вставка каждой ДРУГОЙ строки из одной таблицы в другую (VBA MS Access 2010)

Я работаю с созданной вручную пустой копией таблицы Products, которую я назвал Products_Backup. Я хочу вставить все остальные строки из категории "Специи" продуктов в эту пустую таблицу Products_Backup, так как будет всего 6 строк из 12 строк, которые находятся в таблице "Продукты" в категории "Специи". Проблема в том, что я не знаю, как это сделать. Я пытался использовать оператор MOD для вновь созданного ProductID, но мой наставник сказал мне, что это неправильное решение, так как он мог легко изменить значение этого ProductID, и я получил бы нечетные строки вместо четных.

    Private Sub CommandButton0_Click()
    Dim db As Database, rst As Recordset
    Dim I As Integer, s, s1 As String

    Set db = CurrentDb

    s = "SELECT Products.* FROM Products WHERE (((Products.CategoryNumber)=2));" ' This value is for Spices
    Set rst = db.OpenRecordset(s)
    I = 1
    While Not rst.EOF
      s1 = "INSERT INTO Products_Backup (ProductName, ProductID, CategoryNumber, OrderedUnits) VALUES ('" & rst!ProductName & "', " & I & " , '" & rst!CategoryNumber & "', '" & rst!OrderedUnits & "');"

      MsgBox ("Record inserted")

    db.Execute s1

      I = I + 1
      rst.MoveNext

       If I Mod 10 = 0 Then
         MsgBox ("Inserted  " & I & ".record")
       End If

    Wend

    rst.Close

    db.Close

    End Sub

Таким образом, я могу вставить все 12 записей в Products_Backup, а MsgBox сообщит мне, когда была вставлена ​​10-я запись. Но я до сих пор не знаю, что нужно сделать, чтобы вставить все остальные строки в Products_Backup, чтобы получить 6 записей.

2 ответа

Решение
Dim booEveryOther as Boolean
booEveryOther = False

While Not rst.EOF
   If booEveryOther Then
      s1 = "INSERT INTO ...
   End If

   booEveryOther = Not booEveryOther 

Просто используйте логическое значение, которое установлено в Not сам с каждой новой записью.

Я думаю, что это должно сделать это лучше

While Not rst.EOF
  s1 = " INSERT INTO Products_Backup (ProductName, ProductID, CategoryNumber, OrderedUnits) " & _
       " VALUES ('" & rst!ProductName & "', " & I & " , '" & rst!CategoryNumber & "', '" & rst!OrderedUnits & "');"
  db.Execute s1

  If I Mod 10 = 0 Then
     MsgBox ("Inserted  " & I & ".record")
  Else
     MsgBox ("Record inserted")
  End If

  I = I + 1
  rst.MoveNext
Wend
Другие вопросы по тегам