[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Программирование под ОС / Basic /

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

Или
Как сделать независимость от места установки программы, что бы она работала даже с дисковода "А"


Ситуация 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

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

             End Sub




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Программирование под ОС / Basic /

Основы работы с базами данных
11-02-2009   

Умение обращаться с файлами данных - чуть ли не одна из самых важных ступений в обучении программированию на Visual Basic! Здесь я постараюсь выложить только самые основные приёмы работы с объектом Data... подробнее

Кол. просмотров: общее - 3166 сегодня - 0

Эффективная работа с БД в VB 6.0
11-02-2009   

В статье рассматриваются способы повышения эффективности при разработке клиент-серверных СУБД-приложений в среде VisualBasic 6.0. Наиболее подробно освещены следующие аспекты проблемы... подробнее

Кол. просмотров: общее - 3964 сегодня - 1

Создание программы на Visual basic для вывода случайного числа в заданном интервале чисел
11-02-2009   

В данной статье будет показан способ написания программы для вывода случайного числа в заданном нами интервале чисел, также пошагово будет показано создание соответствующего интерфейса программы на VB6... подробнее

Кол. просмотров: общее - 3590 сегодня - 0

Техника программирования сложных окон в Visual Basic
11-02-2009   

Mногие из Вас наверняка видели в Windows программах окна нестандартной формы (круглые, треугольные и т.д.) и задавали себе вопрос: как мне сделать такое окно?... подробнее

Кол. просмотров: общее - 3451 сегодня - 0

Вызов функций по указателю
11-02-2009   

Вы читали мою первую статью на эту тему? Надеюсь, что нет. Она мне страшно не нравилась уже сразу после опубликования. К тому же, я получил немало откликов на тему мало информации, которые, конечно, считаю справедливыми... подробнее

Кол. просмотров: общее - 3452 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects