Подрубиться из одной базы к другой

Dragon108

Well-known member
19.01.2010
265
0
#1
Есть форма, в ней есть кнопка, по клику на кнопку необходимо лезть в другую базу на том же сервере и искать там данные. Не могу подрубиться к базе. Выдает ошибку "Database has not been opened yet"

Вот код:

Код:
Sub Click(Source As Button)

Dim session As New NotesSession
Dim db As NotesDatabase
Dim unid As String	

Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
unid = doc.UniversalID


Set db =session.getDatabase(SERVER, PATH)


If db Is Nothing Then
Msgbox("0")
Else
Msgbox("1")
End If


// далее поиск по вью в другой базе
Dim view As NotesView

Set view =db.GetView("unidof_work")

Dim coll As NotesDocumentCollection
Set coll = view.GetAllDocumentsByKey( "unid" )
Msgbox(coll.count)

...	

End Sub
Выдает 1, а потом ошибку, описанную выше. Т.е получается что вроде как бд то по указанному пути и с указанным именем есть, но дальше по коду не может к ней подключиться. Хелп плиз
 

Omh

Lotus team
04.07.2007
2 210
1
#2
Ну может прав на базу нет.

Я бы делал так:
Код:
Dim OthDb As New NotesDatabase("", "")
Call OthDb.Open(Server, Path)
if OthDb.IsOpen then
'понеслась косая в баню!
End if
 

hosm

* so what *
18.05.2009
2 442
6
#3
проверь db.IsOpen или юзай параметр:
A NotesDatabase object that can be used to access the database you've specified, or Nothing if the database cannot be opened and createonfail is False. If the database cannot be opened and createonfail is True or omitted, IsOpen is false for the NotesDatabase object.
 

Dragon108

Well-known member
19.01.2010
265
0
#5
Ну может прав на базу нет.

Я бы делал так:
Код:
Dim OthDb As New NotesDatabase("", "")
Call OthDb.Open(Server, Path)
if OthDb.IsOpen then
'понеслась косая в баню!
End if

Права есть.
Не досмотрел кое что, параметр не дописал
из хелпа:

This agent gets a database, creating a NotesDatabase object only if the database exists and can be opened. The agent tests to see if the NotesDatabase object was created.
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.GetDatabase("snapper", "names2", False)
If db Is Nothing Then
Messagebox "names2.nsf does not exist on snapper"
Else
Messagebox db.Title,, "Title of names2.nsf"
End If
End Sub

Добавлено: Вощем пардон, тупанул. проблема решена
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#6
фраза означает что небыло команды db.Open - а я её таки НЕ было
так как базу к примеру можно взять чтобы лишь прочесть её свойства а не полезая внутрь её, это было сделано для тобо, чтобы можно было очень быстро перебирать базы по каталогу
рекомендую для нормального использования БД действовать только так
Код:
Dim tmpdb As NotesDatabase
Set tmpdb = New NotesDatabase("", "")
Call tmpdb.Open(Server, File) ' открываем
 

hosm

* so what *
18.05.2009
2 442
6
#9
фраза означает что небыло команды db.Open - а я её таки НЕ было
между прочим, ее в случае GetDatabase и не надо =)
GetDatabase
Creates a NotesDatabase object that represents the database located at the server and file name you specify, and opens the database, if possible.
а в данном случае у автора просто не смогла открыть - мб, сервер-база были неправильные, прав не было или связи с сервером.
И db.Open может не помочь в данном случае.
 

Dragon108

Well-known member
19.01.2010
265
0
#10
между прочим, ее в случае GetDatabase и не надо =)

а в данном случае у автора просто не смогла открыть - мб, сервер-база были неправильные, прав не было или связи с сервером.
И db.Open может не помочь в данном случае.

Я менеджер бд и там и там. Все пути вроде правильные. Связь есть, на базу зайти могу, есть ещё какие-нибудь варианты?
 

hosm

* so what *
18.05.2009
2 442
6
#11
попробовать явно указать сервер текущей БД в команде Getdatabase.
проверить, правильно ли указали базу - путь относительно серверной data с указанием БД.
Вывести в мессаджбокс пути. проверить наличие русских букв и прочей гадости.
выйти и зайти :)))
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#12
Database has not been opened yet проявлялась периодически при вызове notesDatabase.OpenMail (предполагаю, что GetDatabase тоже косая...), всегда лечилось кодом, который давал Omh и ToxaRat. Более того в таком коде такая ошибка у меня не возникала никогда, - там генерятся нормальные осмысленные ошибки на каждую ситуацию.