Вставка каждой ДРУГИХ строк из одной таблицы в другую (VBA MS Access 2010)
Я работаю с созданной вручную пустой копией таблицы Products, которую я назвал Product_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-я запись.
Но я до сих пор не знаю, что делать, чтобы вставить каждую другую строку в Product_Backup, чтобы получить 6 записей.
Ответы
Ответ 1
Dim booEveryOther as Boolean
booEveryOther = False
While Not rst.EOF
If booEveryOther Then
s1 = "INSERT INTO ...
End If
booEveryOther = Not booEveryOther
Просто используйте логическое значение, которое установлено в Not
с каждой новой записью.
Ответ 2
Я думаю, это должно сделать это лучше
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