Как узнать путь к текущей базе?

Программирование на Visual Basic for Applications
0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Как узнать путь к текущей базе?

Сообщение 0xy » 05.12.2006 (Вт) 2:23

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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.12.2006 (Вт) 7:11

Если ты её открыл, ты знаешь, где она.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

rok
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 18.06.2005 (Сб) 12:45

Сообщение rok » 05.12.2006 (Вт) 12:13

Сервис-параметры-общие-рабочий каталог
Если все удалить из строки то напишется знач.по умолч:Диск\моидок

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Сообщение 0xy » 07.12.2006 (Чт) 5:01

GSerg писал(а):Если ты её открыл, ты знаешь, где она.

Классный прикол :D
Я то знаю, а вот Open почему-то этого не знает ;) (ему обычно "Мои документы" мерещатся)
Еще раз: вопрос в том, как сохранить файл (програмно, естесстно :) ) в той же папке, где лежит база?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.12.2006 (Чт) 5:28

Человек хочет репрессий :roll:
Ладно, нам-то чё :neutral:

Почему не указал, какая база? Почему не указал, откуда и чем она открывается?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 07.12.2006 (Чт) 13:31

Допустим, gggg - это открытый объект (это может быть любой открытый объект - база, файл Excel, документ word и др.), и все сохраняемые другие файлы (например MyFile) нужно сохранять в тот же каталог, где файл этого объекта находится на диске.

Тогда путь куда нужно сохранять файлы можно получить по свойству .Path

MyFile.SaveAs FileName:=gggg.Path & "\" & "Новое имя моего файла.txt"

Для Access свойство Path для текущей открытой базы я не нашел (видимо потому, что там совсем другой подход к объектной модели вообще), но можно сделать так:

MyFile.SaveAs FileName:=Left(Application.CurrentDb.Name, InStrRev(Application.CurrentDb.Name, "\"))&"Новое имя моего файла.txt"
Всякое решение плодит новые проблемы.

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Сообщение 0xy » 08.12.2006 (Пт) 4:45

Genyaa
Спасибо! То, что нужно :)

ps
Вот только на InStrRev Access 97 ругается. Есть ли альтернатива (или самому писать?)

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Сообщение 0xy » 08.12.2006 (Пт) 5:13

Уже написал :)

Код: Выделить всё
Public Function DBPatch$()
Dim i&
DBPatch = Application.CurrentDb.Name
For i = Len(DBPatch) To 1 Step -1
    If Mid(DBPatch, i, 1) = "\" Then Exit For
Next i
DBPatch = Left(DBPatch, i)
End Function

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 08.12.2006 (Пт) 15:09

вместо цикла можно воспользоваться оператором InStr(,"/",DBPatch)
или его тоже нет?
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.12.2006 (Пт) 15:26

Shapka, нельзя: 0xy ищет с конца, а InStr с начала.
Изображение

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 08.12.2006 (Пт) 17:06

0xy писал(а):Уже написал :)

Код: Выделить всё
Public Function DBPatch$()
Dim i&
DBPatch = Application.CurrentDb.Name
For i = Len(DBPatch) To 1 Step -1
    If Mid(DBPatch, i, 1) = "" Then Exit For
Next i
DBPatch = Left(DBPatch, i)
End Function

Код: Выделить всё
CreateObject("Scripting.FileSystemObject").GetFile(Application.CurrentDb.Name).parentfolder.Path

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 10.12.2006 (Вс) 6:20

0xy писал(а):Вот только на InStrRev Access 97 ругается. Есть ли альтернатива (или самому писать?)

см. здесь:

http://support.microsoft.com/default.as ... s%3b188007

можно вставлять эти функции например в таком виде:

Код: Выделить всё
#If Not VBA6 Then
      Public Function StrReverse(ByVal sIn As String) As String
          Dim nC As Integer, sOut As String
          For nC = Len(sIn) To 1 Step -1
          sOut = sOut & Mid(sIn, nC, 1)
          Next
          StrReverse = sOut
      End Function
#End If
Привет,
KL

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 10.12.2006 (Вс) 6:24

Nicky писал(а):
Код: Выделить всё
CreateObject("Scripting.FileSystemObject").GetFile(Application.CurrentDb.Name).parentfolder.Path

или так:
Код: Выделить всё
CurrentProject.Path
Привет,
KL

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 10.12.2006 (Вс) 23:48

KL писал(а):
Nicky писал(а):
Код: Выделить всё
CreateObject("Scripting.FileSystemObject").GetFile(Application.CurrentDb.Name).parentfolder.Path

или так:
Код: Выделить всё
CurrentProject.Path

Краснею ;)

0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Сообщение 0xy » 14.01.2007 (Вс) 11:54

Код: Выделить всё
CurrentProject.Path

Не катит ;) (Access 97)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 107

    TopList