• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Не получается открыть базу данных

  • Автор темы HelenHelen
  • Дата начала
H

HelenHelen

Добрый день!

Агентом нужно открыть базу и скопировать определенные значения полей в документы текущей БД. Проблема возникает сразу на этапе открытия: не удается открыть базу никаким способом.

Ни так:

Код:
Dim CO As NotesDatabase
Dim Server As String
Dim dbpath As String

Set CO= New NotesDatabase("","")
server="Local"
dbpath="cmso.nsf"	
Call CO.Open(server,dbpath)

If CO.Isopen=True Then
MessageBox("Открыто")
Else
MessageBox("Закрыто")
End If

Ни так:

Код:
Set CO=Session.Getdatabase("local","cmso.nsf",False)
Call CO.Open("","")

Свойство IsOpen все равно False, хотя никаких ошибок не выдается.
 
H

hosm

Если БД лежит на локальном сервере, то надо "" вместо имени сервера. ну, и путь к БД считается относительно каталога данных.
 
H

HelenHelen

Спасибо большое, убрала локал и все заработало))))
 
H

HelenHelen

Коллеги, а можно еще такой вопрос: нужно программно открывать документы на редактирование и изменять в них значения текстовых полей. Метод EditDocument определен в классе NotesUIDocument, а, соответственно, нужный метод FieldSetText определен только для документа, открытого на редактирование. Есть ли какой-нибудь способ присвоить переменной класса NotesUIDocument что-нибудь кроме CurrentDocument, т.е. открыть на редактирование произвольный документ, который выбирается программно?
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
Set notesUIDocument = notesUIWorkspace.EditDocument( [editMode] , [notesDocument] , [notesDocumentReadOnly] , [documentAnchor$] , [returnNotesUIDocument] , [newInstance] )

Чем не устраивает?

А зачем вообще открывать документ на редактирование, у Вас шифрование включено?
 
H

HelenHelen

А как же мне иначе переписать поля, не открывая на редактирование?
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
Документы Вы можете найти нужные?

Если да, то используйте методы объекта notesDocument

valueArray = notesDocument.GetItemValue( itemName$ )
Set notesItem = notesDocument.ReplaceItemValue( itemName$, value )
 
H

HelenHelen

Документы найти можно. Но если пользоваться методом ReplaceItemValue, то в самом документе изменения не фиксируются, только в представлении. По правде не знаю, как такое возможно, но, наверно, это связано с тем, что мы не берем документ на редактирование?
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
Если в представлении отображается измененное значение, значит оно в документе изменилось.
Ищите какое поле отображается в документе.

Если документ во время изменения значения через ReplaceItemValue открыт (чтение/редактирование), его нужно переоткрыть, т.к. получается что у Вас открыт "старый" не измененный документ
 
H

HelenHelen

Спасибо, я разобралась, просто в документе и представлении поля разные отображались)))

А еще, если можно, скажите, пожалуйста, как нужно объявить метку? Я хочу воспользоваться конструкцией GoTo, при это метка идет с двоеточием на конце, но мне дизайнер говорит, что метка не определена...
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
Ну так определите метку.

Код:
'Код код код
Goto Метрка
'Код код код
Метка:
'Код код код

А вообще лучше не пользоваться ими, имхо метки нужны только для обработки ошибок в LS.


Добавлено: Очень много полезного узнаете в хелпе дизайнера, он довольно подробный, и почти на все есть хорошие примеры.
Не поленитесь пользоваться.

вот тут , очень полезная информация.
 
O

Omh

А вообще лучше не пользоваться ими, имхо метки нужны только для обработки ошибок в LS.
"Ящитаю" что метки можно юзать.
Например, что читабельнее и компактнее:
Код:
Dim Doc as NotesDocument
Set Doc = Dc.GetFirstDocument
While Not Doc Is Nothing
if Doc.GetItemValue(FLD1)(0) = "" then
if Doc.GetItemValue(FLD2)(0) = "" then
if Doc.GetItemValue(FLD3)(0) = "" then
!PROCESS
End if
End if
End if
Set Doc = Dc.GetNextDocument(Doc)
Wend
или
Код:
Dim Doc as NotesDocument
Set Doc = Dc.GetFirstDocument
While Not Doc Is Nothing
if Doc.GetItemValue(FLD1)(0) <> "" then Goto NextDoc
if Doc.GetItemValue(FLD2)(0) <> "" then Goto NextDoc
if Doc.GetItemValue(FLD3)(0) <> "" then Goto NextDoc
!PROCESS
NextDoc:	
Set Doc = Dc.GetNextDocument(Doc)
Wend
 
Мы в соцсетях:

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