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

HelenHelen

Well-known member
31.08.2011
74
0
#1
Добрый день!

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

Ни так:

Код:
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, хотя никаких ошибок не выдается.
 

hosm

* so what *
18.05.2009
2 442
6
#3
Если БД лежит на локальном сервере, то надо "" вместо имени сервера. ну, и путь к БД считается относительно каталога данных.
 

HelenHelen

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

Kizarek86

Lotus team
20.07.2007
864
4
#6
Set notesUIDocument = notesUIWorkspace.EditDocument( [editMode] , [notesDocument] , [notesDocumentReadOnly] , [documentAnchor$] , [returnNotesUIDocument] , [newInstance] )

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

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

HelenHelen

Well-known member
31.08.2011
74
0
#7
А как же мне иначе переписать поля, не открывая на редактирование?
 

Kizarek86

Lotus team
20.07.2007
864
4
#8
Документы Вы можете найти нужные?

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

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

HelenHelen

Well-known member
31.08.2011
74
0
#9
Документы найти можно. Но если пользоваться методом ReplaceItemValue, то в самом документе изменения не фиксируются, только в представлении. По правде не знаю, как такое возможно, но, наверно, это связано с тем, что мы не берем документ на редактирование?
 

Kizarek86

Lotus team
20.07.2007
864
4
#10
Если в представлении отображается измененное значение, значит оно в документе изменилось.
Ищите какое поле отображается в документе.

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

HelenHelen

Well-known member
31.08.2011
74
0
#11
Спасибо, я разобралась, просто в документе и представлении поля разные отображались)))

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

Kizarek86

Lotus team
20.07.2007
864
4
#12
Ну так определите метку.

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


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

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

Omh

Lotus team
04.07.2007
2 210
1
#13
А вообще лучше не пользоваться ими, имхо метки нужны только для обработки ошибок в 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