• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Функция не возвращает Notesdocument из другой БД

  • Автор темы fvoice
  • Дата начала
F

fvoice

Function GetDoc(UN as string) as NotesDocument
Dim doc As NotesDocument
...........
Set GetDoc = doc
ExitFunction
- лежит в библиотеке

при вызове возвращает Nothing... так должно быть? могут ли функции возвращать указатели на обьекты?

не знаю критично или нет, doc находится в другой БД
 
M

morpheus

<!--QuoteBegin-fvoice+5:10:2007, 12:56 -->
<span class="vbquote">(fvoice @ 5:10:2007, 12:56 )</span><!--QuoteEBegin-->могут ли функции возвращать указатели на обьекты?
[snapback]80754" rel="nofollow" target="_blank[/snapback]​
[/quote]
да, могут

<!--QuoteBegin-fvoice+5:10:2007, 12:56 -->
<span class="vbquote">(fvoice @ 5:10:2007, 12:56 )</span><!--QuoteEBegin-->не знаю критично или нет, doc находится в другой БД
[snapback]80754" rel="nofollow" target="_blank[/snapback]​
[/quote]
да канечно, если в ф-ции привязка на тек. БД

кода та не видно!
 
M

Mihal

Если документ из другой БД и ПОСЛЕ вызова из функции нету объекта той БД, то NotesDOcument волшебным образом превращается в Nothing. Выход - протаскивать объект DB через функцию. То есть пропсывать Function GetDoc(UN as string, DB As NotesDatabase) as NotesDocument.
 
M

morpheus

Для: Mihal
да тоже может быть, убиваете базу - пропадает привзяка на документ
 
F

fvoice

кода та не видно!

Код:
Function MyGetMainDoc(UN As String) As NotesDocument

Dim ws As New NotesUIWorkspace
Dim parent As NotesDocument
Dim db As New NotesDatabase("","")
Dim view As NotesView

On Error Goto Errhandle

If Not db.OpenWithFailover(	MyGetServer("DBDocs"),MyGetDB("DBDocs")) Then
Messagebox "Документ не найден, возможно он был удален, или БД временно не доступна!"
Exit Function
End If
Set view = db.GetView("($UN)")
Set parent = view.GetDocumentByKey(UN)

If Not (parent Is Nothing) Then
Set MyGetMainDoc = parent
Else 
If Not db.OpenWithFailover(	MyGetServer("DBArchive"),MyGetDB("DBArchive")) Then
Messagebox "Документ не найден, возможно он был удален, или БД временно не доступна!"
Exit Function
End If
Set view = db.GetView("($UN)")
Set parent = view.GetDocumentByKey(UN)

If Not (parent Is Nothing) Then
Set MyGetMainDoc = parent
Else
If Not db.OpenWithFailover(MyGetServer("DBTrash"),MyGetDB("DBTrash")) Then
Messagebox "Документ не найден, возможно он был удален, или БД временно не доступна!"
Exit Function
End If
Set view = db.GetView("($UN)")
Set parent = view.GetDocumentByKey(UN)

If Not (parent Is Nothing) Then
Set MyGetMainDoc = parent
Else
Set MyGetMainDoc = Nothing
End If
End If
End If

Exit Function
Errhandle:	
Messagebox "Error on MyGetMainDoc" & Str(Err) & ": " & Error$+"on line" & Cstr(Erl)
Exit Function

End Function

Выход - протаскивать объект DB через функцию
выходит не получиться?
 
M

Mihal

<!--QuoteBegin-Mihal+5:10:2007, 13:04 -->
<span class="vbquote">(Mihal @ 5:10:2007, 13:04 )</span><!--QuoteEBegin-->Если документ из другой БД и ПОСЛЕ вызова из функции нету объекта той БД, то NotesDOcument волшебным образом превращается в Nothing. Выход - протаскивать объект DB через функцию. То есть пропсывать Function GetDoc(UN as string, DB As NotesDatabase) as NotesDocument.
[snapback]80760" rel="nofollow" target="_blank[/snapback]​
[/quote]

Вот тут корень! Зрим в корень!
 
F

fvoice

Вот тут корень! Зрим в корень!
дык.. Откройте мне глаза пожалуйста, как мне засунуть в функцию обьект БД, если заранее не знаю в какой БД документ лежит? :lol:
 
M

Mihal

<!--QuoteBegin-fvoice+5:10:2007, 13:43 -->
<span class="vbquote">(fvoice @ 5:10:2007, 13:43 )</span><!--QuoteEBegin-->дык.. Откройте мне глаза пожалуйста, как мне засунуть в функцию обьект БД, если заранее не знаю в какой БД документ лежит?
[snapback]80777" rel="nofollow" target="_blank[/snapback]​
[/quote]
Function MyGetMainDoc(UN As String, DB As NotesDatabase) As NotesDocument

А в самой функции объявление db выкинь нафиг. Делаешь объект Notesdatabase снаружи, потом передаёшь его в функцию - и усё! Переменные-оюъекты передаются по ссылке, после отработки функции будешь иметь свой db.
 
F

fvoice

Для: Mihal
Хитрый ход конем! :lol:
Сенкс!
 
R

redbestcat

Для: fvoice

а что собираешсь потом с этим документом делать?

Открывать в UI? изменять в нем что-то? просто читать из него информацию?
 
F

fvoice

Для: redbestcat
у меня была процедурка MyOpenMainDoc(UN as string) которая открывала документ, появилась необходимость просто получать объект, что бы просто читать с него поля... запнулся.. помогли добрые люди!
 
R

redbestcat

Для: fvoice

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

В процедуре:
1. Нашел нужный док
2. Создал новый док в текущей базе
3. Скопировал все итемы с найденного дока в новый
4. Вернул новый док

Дальше его просто не сохраняешь.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!