Создайте каталог для каждого нового контакта в MS Access и проверяйте существование только по идентификатору контакта.

Вопрос или проблема

Создайте каталог для каждого нового контакта в MS Access и проверяйте существование только по идентификатору контакта.

Я хотел бы создать новый каталог для любого нового контакта, который я ввожу в базу данных Access, но хотел бы проверять существование каталога только по последним 4 символам. Эти последние 4 символа — это идентификатор контакта, так что если кто-то изменит данные контакта (например, имя), форма не будет создавать новый каталог. По этой причине с помощью поля “TxtContactAs” я формирую название каталога в виде “John Doe – 0085”

Мой код:

Private Sub MakeContactFolder()
    
    Dim Path As String
    
    Path = Application.CurrentProject.Path & "\" & Me.TxtCustOrSupp.Value
    If Dir(Path, vbDirectory) = vbNullString Then MkDir (Path)
    
    Path = Application.CurrentProject.Path & "\" & Me.TxtCustOrSupp.Value & "\" & Me.TxtContactAs.Value
    If Right(Dir(Path, vbDirectory), 4) <> Right(Me.TxtContactAs.Value, 4) Then MkDir (Path)
    
End Sub

Проблема в том, что он не выдает ошибку, но всякий раз, когда я изменяю данные контакта, форма создает новый каталог с новым именем.

Ответ или решение

Создание директории для каждого нового контакта в базе данных MS Access и проверка существования директории по последним четырем символам идентификатора контакта может быть реализовано с использованием VBA (Visual Basic for Applications). В вашем коде есть несколько моментов, которые можно улучшить, чтобы избежать создания новой директории при изменении деталей контакта.

Во-первых, нужно убедиться, что проверка существования директории выполняется правильно. Код должен сравнивать последние четыре символа идентификатора контакта с идентификаторами, которые уже существуют в системе. Если нужно создавать папку только при отсутствии существующей директории для данного ID, то необходимо сделать следующее:

  1. Создать путь к директории, используя ID контакта.
  2. Проверить существует ли уже директория с этим ID.
  3. Если нет, то создать новую директорию.

Давайте улучшим ваш код следующим образом:

Private Sub MakeContactFolder()

    Dim BasePath As String
    Dim ContactID As String
    Dim ContactName As String
    Dim FolderPath As String

    ' Присваиваем пути и значения переменным
    BasePath = Application.CurrentProject.Path
    ContactID = Right(Me.TxtContactAs.Value, 4) ' Получение последних 4 символов (ID)
    ContactName = Left(Me.TxtContactAs.Value, Len(Me.TxtContactAs.Value) - 4) ' Извлечение имени без ID
    FolderPath = BasePath & "\" & Me.TxtCustOrSupp.Value & "\" & ContactName & " - " & ContactID

    ' Проверка существования основной директории
    If Dir(BasePath & "\" & Me.TxtCustOrSupp.Value, vbDirectory) = "" Then
        MkDir BasePath & "\" & Me.TxtCustOrSupp.Value
    End If

    ' Проверка существования контактной директории
    If Dir(FolderPath, vbDirectory) = "" Then
        MkDir FolderPath
    End If

End Sub

В этом пример кода:

  • BasePath – это основной путь к вашей базе данных.
  • ContactID – получаем последние 4 символа из строки, представляющей контакт (где должны храниться последние 4 символа ID).
  • ContactName – извлекаем имя контакта, исключая последние 4 символа (ID).
  • FolderPath – это полный путь, где будет создана директория для контакта.

Ключевое изменение здесь заключается в том, что мы сначала проверяем существует ли основная директория, а затем проверяем существует ли директория конкретного контакта. Если нет, то создаем ее.

Таким образом, при изменении деталей контакта (имя), новый путь не будет создаваться, если идентификатор остается прежним. Это позволяет избежать создания дублирующих директорий для контактов с одинаковыми ID.

Оцените материал
Добавить комментарий

Капча загружается...