Вопрос или проблема
Создайте каталог для каждого нового контакта в 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, то необходимо сделать следующее:
- Создать путь к директории, используя ID контакта.
- Проверить существует ли уже директория с этим ID.
- Если нет, то создать новую директорию.
Давайте улучшим ваш код следующим образом:
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.