<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      VB設置Lotus Notes數據庫

      [摘要]概述 今天,異構數據環境已經是一個普遍存在的問題,Windows常用開放數據庫互連標準ODBC進行數據交換與操作,后來微軟又推出了ADO技術,例如用VB操作Oracle、Sybase和SQL Ser...
      概述

      今天,異構數據環境已經是一個普遍存在的問題,Windows常用開放數據庫互連標準ODBC進行數據交換與操作,后來微軟又推出了ADO技術,例如用VB操作Oracle、Sybase和SQL Server等,其應用也越來越普遍。

      辦公自動化軟件中常用的數據庫系統Lotus Notes,屬于非關系數據庫管理系統,具有以下特點:

      1. 基于文檔組織模式;

      2. 使用非結構化的數據元素;

      3. 通過定時復制刷新數據;

      4. 使用視圖定位數據;

      5. 通過全文檢索訪問數據。

      因為ADO或ODBC的方法是針對Oracle等關系數據庫管理系統的,主要是通過SQL語言訪問數據,Notes盡管也提供了Notes ODBC,但它并不支持全文檢索,因此要在VB中實現對Lotus Notes數據庫的存取,必須通過別的方法。

      在Notes中使用COM和OLE

      OLE是Windows的一個特征,OLE通過把應用程序的功能作為對象暴露給其他應用程序,這些對象擁有屬性(數據)和方法(函數),應用程序通過OLE中的對象去執行相應的任務。Domino既可以作為一個OLE提供給外部程序調用,也可以通過OLE去控制其他OLE對象。盡管OLE也有許多優點,但Domino的OLE服務不支持早期綁定,這意味著在VB等應用程序中對OLE編程進行類型檢查、快速啟動時,Domino OLE將強迫應用程序啟動Notes的客戶端,從而對系統產生巨大壓力。此外,應用程序不能同時啟動多個NotesSession,主要出于安全角度,Domino的OLE不允許應用程序直接輸入用戶名和密碼,因此整個應用程序要么頻繁地啟動和關閉Domino OLE來打開NotesSession,要么大量使用全局變量,對程序設計極為不利。

      在R5.03以后,Lotus提供了一個后臺的COM類NotesSession。NotesSession是一個功能強大的對象模型,它提供了其他Notes對象的接口,即只有通過它才能訪問Notes中的數據庫對象NotesDatabase、NotesView等對象。

      由于COM與OLE的兼容性,因此,用VB等程序操作Domino就變得相當容易,在VB中引用的方法非常簡單,新建一個工程,在菜單“工程”下選擇“引用”,則會出現下列對話框:


      圖1 新建工程時加入對Domino庫的引用

      同時在Form上放一個FlexGrid控件,產生一個如圖2所示的窗體。 在窗體事件Load 中鍵入下列代碼:


      圖2 窗口界面

      Private Sub Form_Load()

      Dim Session As New Domino.NotesSession

      Dim PublicNotesDb As New Domino

      .NotesDatabase

      Dim View As NotesView

      Dim C As NOTESVIEWCOLUMN

      Dim Mycount As Integer

      Session.Initialize

      Set PublicNotesDb = session.GetDatabase(“教科文處/教科文”, “檔案管理.nsf”)

      If PublicNotesDb Is Nothing Then

      MsgBox (“不能打開Notes庫,請查看系統設置!”)

      End If

      Set View = PublicNotesDb.GetView(“Having AutoCode”)

      With grdDataGrid

      .Clear

      j = 0

      .Rows = 2

      .FixedCols = 1

      .FixedRows = 1

      .Col = 1

      .FixedRows = .Row

      .Row = 0

      .Cols = 2

      j = 1

      For Each C In View.Columns

      .AddItem (C.Title)

      x.Caption = C.Title

      .Col = j

      .Cols = .Col + 2

      .Item(j).Visible = False

      .Text = C.Title

      If C.IsHidden = True Then

      .ColWidth(j) = 0

      End If

      j = j + 1

      Next

      .Cols = j + 3

      .Col = j

      .Text = “處理情況”

      .Col = j + 1

      .Text = “處理原因”

      .Col = j + 2

      .Text = “處理責任人”

      .ColWidth(2) = 1800

      .ColWidth(3) = 1800

      Dim Doc As Object NOTESDOCUMENT

      Set Doc = View.GetFirstDocument

      .Row = 1

      j = 1

      Dim Str As String

      Do Until Doc Is Nothing

      .Col = 1

      .Text= Doc.GetItemValue(“登記號”)(0)

      .Col = 2

      Str = Doc.GetItemValue(“組卷號”)(0)

      .Text = Str

      .Col = 3

      .Text= Doc.GetItemValue(“文件字號”)(0)

      .Col = 4

      .Text= Doc.GetItemValue(“文件名”)(0)

      Set Doc=View.GetNextDocument(Doc)

      If Not Doc Is Nothing Then

      If j >= .Rows Then

      .Rows = j + 1

      End If

      .Row = j; j = j + 1

      End If

      Loop

      .MergeCells = flexMergeRestrictColumns

      ’MergeCells = 2

      .MergeCol(0) = True

      .MergeCol(1) = True

      .MergeCol(2) = True

      .MergeCol(3) = True

      .Redraw = True

      End With

      End Sub

      上面的代碼中,調用initialize方法產生一個NotesSession 對象,它的方法有點類似VBA中調用Word的方法,如果采用 IsOpen可以判斷是否已經打開對話框,函數GetDatabase()打開Notes數據庫, 其中取得一個數據的函數用法有點特別:

      .Text = Doc.GetItemValue(“登記號”)(0)

      使用兩個連續的括號似乎Visual Basic不允許,其實Domino中允許多值域,所以函數GetItemValue()返回的實質上是一個數組,第一個元素從0開始。

      按鍵盤F5開始運行,就可以看到輸出結果。

      VB操作Domino COM的優缺點

      VB操作Domino COM具有以下優點:

      ● VB應用程序不需要調用Lotus Notes客戶端就可以訪問Notes的函數;

      ● 程序員可以在設計時使用早期綁定,其速度比晚綁定快,最主要的是可以利用VB6的智能語法提示功能;

      ● COM的運行速度比Lotus Script快;

      ● 可以獨立于Lotus Notes客戶端進行應用程序分發。

      遺憾的是Domino的COM與VBA等相比,還有一些明顯缺點:

      ● 目前Lotus只支持后臺的Domino對象,即session,對于UIWorkSpace 并不支持(如果支持,就意味Lotus客戶端可以被用戶或第三方程序取代);

      ● 由于COM只被Windows所支持,目前Unix還不能使用本文所論述的方法;

      ● 由于安全原因,Louts目前不支持DCOM技術;

      ● Lotus 提供的COM并不支持“ref”內存指針,標準COM提供三種內存指針:“ref”、“unique”和“ptr”,其中“ref”開銷最小。

      結 論

      采用COM作為VB與Domino的橋梁,既可以發揮Domino的強大的文檔處理能力,又可以發揮VB友好的可視化功能。文中例子是筆者實際工作中使用過的,該設計采用R5.05和VB6開發工具,在Win98、NT和Win2000下均工作正常。


      日韩精品一区二区三区高清