работа с набором записей на VBA и доступе, как я могу скопировать последнюю запись и изменить ее поле - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть исходные данные в таблице, называемой «MyData», где я могу видеть, сколько у меня продуктов, и какой тип продукта у них.

, если продукт относится к типу продукта, AI создает только одну компенсациюправить.Однако, если это продукт типа B, мне нужно создать два правила компенсации.

Я использую более или менее следующий алгоритм

rsrule=db.OpenRecordset("Rules", dbOpenTable)

Do While Not rsdd.EOF
rsrule.AddNew

Do stuff
Detect the type of the product
type="B"
flag= true 

rsrule.Update

now I want to add the same rule I have just added and change only one field rsrule![compensation percentage]=0.25

rsdd.MoveNext


Loop

Может ли кто-нибудь указать мне правильное направление навыполнить это?

Большое спасибо

1 Ответ

0 голосов
/ 02 февраля 2019

Похоже, что у вас есть отношение 1 ко многим между продуктами и правилами компенсации.Каждый продукт может иметь много правил компенсации.Итак, структурируйте базу данных соответствующим образом: enter image description here

Таблица продуктов присваивает 1 ProductID каждому продукту на складе.были добавлены таблицы ProductTypes и CompensationRuleTypes, чтобы база данных могла расширяться для обработки новых продуктов и правил компенсации.MyDataTable не имеет никакой дополнительной информации, поэтому замените его формой, если конечный пользователь должен сделать что-то, например, добавление продуктов, и замените его отчетом, если конечному пользователю нужно только увидеть количество продуктов.

Далее он выглядитКак вы хотите VBA код, который заполняет таблицу ProductCompensationRules для всех продуктов.Этот код также проверяет, были ли добавлены соответствующие правила, и пропускает их в этом случае:

Private Sub FillCompensationRulesTableUsingVBA()
Dim rsProducts As dao.Recordset
Set rsProducts = CurrentDb.OpenRecordset("Products", dbOpenDynaset)
Dim rsProductsCompensationRules As dao.Recordset
Set rsProductsCompensationRules = CurrentDb.OpenRecordset("ProductCompensationRules", dbOpenDynaset)
rsProducts.MoveFirst
Do While Not rsProducts.EOF 'loop through products and add compensation rule 2 for all products and compensation rule 1 for producttype 2
 If IsNull(DLookup("ProductID", "ProductCompensationRules", "ProductID = " & rsProducts!ProductID & " AND CompensationRuleID = 2")) Then
 With rsProductsCompensationRules
 .AddNew
 !ProductID = rsProducts!ProductID
 !CompensationRuleID = 2
 .Update
 End With
 End If
 If rsProducts!ProductTypeID = 2 Then
 If IsNull(DLookup("ProductID", "ProductCompensationRules", "ProductID = " & rsProducts!ProductID & " AND CompensationRuleID = 1")) Then
 With rsProductsCompensationRules
 .AddNew
 !ProductID = rsProducts!ProductID
 !CompensationRuleID = 1
 .Update
 End With
 End If
 End If
    rsProducts.MoveNext
Loop
'clean up
rsProducts.Close
rsProductsCompensationRules.Close
Set rsProducts = Nothing
Set rsProductsCompensationRules = Nothing
End Sub
...