Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Об ошибке составления пути к текущей директории ...и не только

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

‘и так далее,другие строки кода
            

  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте