Как я могу проверить нулевые значения в Access? - PullRequest
2 голосов
/ 26 октября 2008

Я новичок в Access. У меня есть таблица, полная записей. Я хочу написать функцию, чтобы проверить, является ли какой-либо идентификатор нулевым или пустым. Если это так, я хочу обновить его с ххххх. Проверка идентификатора должна проходить через все таблицы в базе данных. Кто-нибудь может предоставить пример кода?

Ответы [ 3 ]

1 голос
/ 26 октября 2008

Я не уверен, что вы сможете найти все таблицы в базе данных с помощью Access SQL. Вместо этого вам может потребоваться записать некоторый VBA для циклического перемещения по таблицам и сгенерировать некоторый SQL для каждой таблицы. Что-то вроде:

update TABLE set FIELD = 'xxxxxx' where ID is null
0 голосов
/ 05 ноября 2008

Проверьте функцию Nz (). Он оставляет поля без изменений, если они не равны нулю, и заменяет их тем, что вы укажете.

Для разумных чисел и размеров таблиц, это может быть быстрее всего

  • открыть их
  • сортировка по каждому полю по очереди
  • проверить нулевые значения и заменить вручную

Хорошей практикой является выяснение, откуда приходят нули и их остановка - задайте значения полей по умолчанию, используйте Nz () на входах. И пусть ваш код обрабатывает все нули, которые проскальзывают через сеть.

0 голосов
/ 27 октября 2008

Я называю это функцией UpdateFieldWhereNull , и показана подпрограмма, которая ее вызывает ( адаптировано из http://www.aislebyaisle.com/access/vba_backend_code.htm)

Обновляет все таблицы в параметре DbPath ( не проверено, обращайтесь с осторожностью ):

Function UpdateFieldWhereNull(DbPath As String, fieldName as String, newFieldValue as String) As Boolean
    'This links to all the tables that reside in DbPath,
    '  whether or not they already reside in this database.
    'This works when linking to an Access .mdb file, not to ODBC.
    'This keeps the same table name on the front end as on the back end.
    Dim rs As Recordset

        On Error Resume Next

    'get tables in back end database
        Set rs = CurrentDb.OpenRecordset("SELECT Name " & _
                                        "FROM MSysObjects IN '" & DbPath & "' " & _
                                        "WHERE Type=1 AND Flags=0")
        If Err <> 0 Then Exit Function

    'update field in tables
        While Not rs.EOF
            If DbPath <> Nz(DLookup("Database", "MSysObjects", "Name='" & rs!Name & "' And Type=6")) Then

                'UPDATE the field with new value if null
                DoCmd.RunSQL "UPDATE " & acTable & " SET [" & fieldName & "] = '" & newFieldValue & "' WHERE [" & fieldName & "] IS NULL"

            End If
            rs.MoveNext
        Wend
        rs.Close

        UpdateFieldWhereNull = True
End Function


Sub CallUpdateFieldWhereNull()
    Dim Result As Boolean

    'Sample call:
    Result = UpdateFieldWhereNull("C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb", "ID", "xxxxxx")
    Debug.Print Result
End Sub
...