Итерация по массиву с помощью vba для обновления таблицы доступа MS - PullRequest
0 голосов
/ 15 апреля 2019

Здравствуйте. Я пытаюсь выяснить, как перебирать список для обновления таблицы доступа.

Таблица продуктов имеет столбец для штрих-кода, а также статус.Возможны следующие варианты состояния: заданный, отложенный заказ, прекращено.

У меня есть список штрих-кодов, которые могут храниться в Excel, или я могу выполнить запрос, но мне нужно перебрать список штрих-кодов, чтобы пометить каждый элемент как снятый с производства.Я не сделал этого прежде, чем любая помощь будет большой благодарностью.

1 Ответ

1 голос
/ 15 апреля 2019

Приведенные ниже методы предполагают, что вы либо импортировали данные из файла Excel, либо связались с ним из Access.

Метод запроса: Если в таблице есть снятые с производства штрих-кодыили запрос, вы можете использовать этот запрос на обновление (рекомендуемый способ для простых случаев, таких как ваш):

UPDATE PRODUCTS SET PRODUCTS.STATUS = "DISCONTINUED"
WHERE PRODUCTS.BARCODE IN (SELECT BARCODE FROM OLD_BARCODES);

VBA Метод: Если вы настаиваете на использовании VBA, вы можете использовать эту функцию дляПросмотрите оба списка штрих-кодов и обновите свой активный список:

Function UpdateBarcodeStatus()
    Dim rsDC, rsCur As Recordset

    ' open rs for current barcodes
    Set rsCur = CurrentDb.OpenRecordset("SELECT BARCODE, STATUS FROM BARCODES")
    ' open rs for discontinued barcodes
    Set rsDC = CurrentDb.OpenRecordset("SELECT BARCODE FROM OLD_BARCODES")

On Error GoTo ErrHandler:
    rsCur.MoveFirst

    ' loop through all current barcodes
    While Not rsCur.EOF
        rsDC.MoveFirst
        ' loop through discontinued barcodes for each current barcode
        While Not rsDC.EOF
            If rsDC!BARCODE = rsCur!BARCODE Then
                ' edit current barcode status
                rsCur.Edit
                rsCur!Status = "DISCONTINUED"
                rsCur.Update
            End If

            rsDC.MoveNext
        Wend

        rsCur.MoveNext
    Wend

HandleClose:
    ' close recordsets
    rsDC.Close
    rsCur.Close

    Exit Function

ErrHandler:
    Debug.Print Err.Description
    GoTo HandleClose
End Function
...