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

Тема в разделе "Lotus - Программирование", создана пользователем HelenHelen, 31 авг 2011.

  1. HelenHelen

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    Добрый день!

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

    Ни так:

    Код (LotusScript):
    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
    Ни так:

    Код (LotusScript):
    Set CO=Session.Getdatabase("local","cmso.nsf",False)
    Call CO.Open("","")
    Свойство IsOpen все равно False, хотя никаких ошибок не выдается.
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Это такой сервер "local"?
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Если БД лежит на локальном сервере, то надо "" вместо имени сервера. ну, и путь к БД считается относительно каталога данных.
     
  4. HelenHelen

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    Спасибо большое, убрала локал и все заработало))))
     
  5. HelenHelen

    HelenHelen Well-Known Member

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

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Set notesUIDocument = notesUIWorkspace.EditDocument( [editMode] , [notesDocument] , [notesDocumentReadOnly] , [documentAnchor$] , [returnNotesUIDocument] , [newInstance] )

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

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

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    А как же мне иначе переписать поля, не открывая на редактирование?
     
  8. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Документы Вы можете найти нужные?

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

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

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    Документы найти можно. Но если пользоваться методом ReplaceItemValue, то в самом документе изменения не фиксируются, только в представлении. По правде не знаю, как такое возможно, но, наверно, это связано с тем, что мы не берем документ на редактирование?
     
  10. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Если в представлении отображается измененное значение, значит оно в документе изменилось.
    Ищите какое поле отображается в документе.

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

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    Спасибо, я разобралась, просто в документе и представлении поля разные отображались)))

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

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Ну так определите метку.

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


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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    "Ящитаю" что метки можно юзать.
    Например, что читабельнее и компактнее:
    Код (Text):
    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
    или
    Код (Text):
    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
     
Загрузка...

Поделиться этой страницей