div.main {margin-left: 20pt; margin-right: 20pt}
Об ошибке составления пути к текущей директории ...и
не только
Ситуация 1: Cоздав однажды программу в какой-то директории-имя этойдиректориибудет тянуться вплоть до
инсталляционных дискет, что не всегда удобно.Это вызвано, например, тем что в
начальный период составления приложениямы естественно в Properties элемента
управления Data1 базы данных делаемпривязку к директории разработки
программы из окна формы..Этим самымв Data1.DatabaseName мы забиваем
адрес текущей директории - раз и навсегда связываем себе
руки.
Ситуация 2: Иногда нам необходимо один и то же элемент управления типа
Data1 переключать на разные базы данных, меняя при этом также и
наименование Data1.Recordsourse!!!Т.е. попутно стоит задача: "Как
избавиться от постоянных изменений адреса Data1.DatabaseName и имени Recordsourse в исходнике?
Многие делают эти изменения программно и также через Properties
элемента Data1,т.е.
возлагаяэту
задачу на приложение, читающего путь к новой текущей
директорииприложению и БД.Нового в этом ничего нет -
все эти свойства заложены в VB и этим пользуются программисты. А
начинающие должны еще только это изучить. Долго пользовался этим приемом и я, но вдруг
споткнулся, запустив файл ехес дискеты "А".Программа выдает
Error - не видит наличие файлов в текущей директории!!! Когда я проблему решил сам, то решил поделиться на сайте, описав
все по порядку в своем изложении для предупреждения новичков в ошибке
мышления программиста.
Ниже
приводится варианты объяснений и пример как это
устранить
В
каталоге, например,DEMO
-разместите чистую форму с
кодом:
Private Sub Form_Load()
Dim
peremDir
peremDir = App.Path ' <-- это всегда текущая
директория
Запусти
приложение через F8 (кстати, это пошаговое исполнение)подведите на App.Path мышку
и убедитесь (кто, еще незнает) какее читает комп. Если
это просто директория, то читаетсяона, например, так
' "C:DEMO" или "А:DEMO".В
конце строки не стоит "". И так, если директория не корневая то будет
правильно выражение и при
проверке наличия файла и не сработаетOn Error Goto
ObpabErr:
On Error
GoTo ObpabErr
If Dir(peremDir & "" &
"Form1.frm") <> "" Then
MsgBox
"Tекущая директория на диске не корневая, то она" & vbNewLine &
"не имеет в конце '' .
Но Вы смотрите правильно
заданный путь" & vbNewLine & "к файлу:" & (peremDir & ""
&
"Form1.frm"), vbInformation, ""
Exit
Sub End
If
Иначе
если мыразместите чистую форму с
кодом: в корневой директории, например,"C:",тогда выражение: If Dir(peremDir & "" & "Form1.frm")
<> "" Then будет неверным C:\Form1.frm и сработает On Error GoTo
ObpabErr с переходом на следующую строку: ObpabErr:MsgBox "Мы находимся в текущей корневой
директории " & vbNewLine & "то она уже имеет в конце '' , см.:
-" & peremDir & vbNewLine
& "Значит путь к файлу нами написан неправильно! - " & peremDir
& "" & "Form1.frm" & vbNewLine & "Вы обратили внимание в
чем неправильно???" & vbNewLine & "Далее приведен кодкак исправить положение (см. код):",
vbExclamation, ""
Если
Вы разместите форму приложения на диске "А" в директории
"А:DEMO",то также все будет нормально в
строке пути:
peremDir & "" & DEMO & ""&
"Form1.frm"
А теперь
для убеждения разметите форму в корневой директории диска "А:"
и сновазапустите приложение через F8и Вы убедитесь, что мы предложили
компу неверный путь к файлу Form1.frm таков:= "А:\Form1.frm", значит попытка чтения наличия файла в текущей
директории:
If
Dir(peremDir & "" & "Form1.frm") <> "" Then'будет также неверная!!! Чтобы
убедиться в правоте моего обяснения - наведите мышку на
переменную peremDir = она будет равна
"А:".
End Sub
Чтобы
закончить наш разговор, то надо раз и навсегда принять правило
приводить переменную значения текущей директории
к формуле безокончания на
"". Как это сделать, вот
так:
If
Right(peremDir, 1) = "" Then
peremDir = Left(peremDir, Len(peremDir) -
1)
End
If
Теперь
путь к текущей директории будет однозначно задан
переменной peremDir, но всегда без
"". И мы не будем
задумываться какая у нас директория - корневая или простодиректория, и где находится наша
программа. Cледующая проверка всегда
положительна и без срабатывания
Error:
If Dir(peremDir &
"" & "Form1.frm") <> "" Then
MsgBox "Теперь всегда правильно заданный " & vbNewLine
&
"текущий путь (App.Path) к файлу:" &
vbNewLine & (peremDir &
"" & "Form1.frm"), vbInformation,
""
End
If
Это еще
удобнее и тогда, когда переменная будет
обявлена
Public peremDir As
String
когдамы ее используем
длязадания текущей директории
различным элементам управления. Например, очень удобно cделать привязку
нахождения БД к текущей директории.
например:
Data1.DatabaseName = peremDir & "" &
"BASEKOD_VB.mdb"
Data1.RecordSource =
"AdrInet"
Data1.Refresh
Это
даст независимость места установки программы, хоть на Дисководе
"A".
Что ранее
не мог я сделать
Теперь
оставьте на форме и используйте всегда такой
код:
В модуле
или разделе Option Explicitобявите
переменную Public peremDir As
String:
Option
Explicit
Public peremDir As String
Private Sub
Form_Load()
peremDir = App.Path ' <-- это всегда текущая
директория
If
Right(peremDir, 1) = "" Then
peremDir = Left(peremDir, Len(peremDir) -
1)
End
If
If
Dir(peremDir & "" & "Form1.frm") <> "" Then
MsgBox "Теперь всегда будетправильно заданный " & vbNewLine
& "текущий
путь (App.Path) к файлу:" & vbNewLine
& (peremDir & "" & "Form1.frm"), vbInformation,
""
End
If
‘и так далее,другие строки
кода
|