VB操作LotusNotes資料庫
今天,異構資料環境已經是一個普遍存在的問題,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中引用的方法非常簡單,新建一個工程,在選單“工程”下選擇“引用”,則會出現下列對話方塊:
新建工程時加入對Domino庫的引用
同時在Form上放一個FlexGrid控制元件,產生一個如圖2所示的窗體。 在窗體事件Load 中鍵入下列程式碼:
視窗介面
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下均工作正常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14751907/viewspace-426969/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用vb操作檔案或資料夾
- VB6基本資料庫應用(二):建立資料庫資料庫
- vb6 access資料庫當機資料庫
- 常用操作 / 資料庫操作資料庫
- 資料庫操作資料庫
- 資料庫操作·資料庫
- VB使用ADO物件連結資料庫物件資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- MongoDB 資料庫操作MongoDB資料庫
- mongodb資料庫操作MongoDB資料庫
- MySQL 資料庫操作MySql資料庫
- laravel 資料庫操作Laravel資料庫
- django資料庫操作Django資料庫
- Ecos 資料庫操作資料庫
- 資料庫基本操作資料庫
- 用VB連線MySQL資料庫模組(詳解)MySql資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- 資料庫——基礎(資料庫操作,表格操作)——增加高階查詢資料庫
- Mysql資料庫操作命令MySql資料庫
- Laravel 資料庫基本操作Laravel資料庫
- django操作多資料庫Django資料庫
- Go之資料庫操作Go資料庫
- PHP操作MySQL資料庫PHPMySql資料庫
- postgresql 資料庫基本操作SQL資料庫
- MySQL資料庫常用操作MySql資料庫
- 【Java】操作Sqlite資料庫JavaSQLite資料庫
- 【Java】操作mysql資料庫JavaMySql資料庫
- 資料庫操作語句資料庫
- 資料庫操作指令(一)資料庫
- MySQL資料庫基本操作MySql資料庫
- 資料庫有關操作資料庫
- Mongo 資料庫 基本操作Go資料庫
- pgsql資料庫copy操作SQL資料庫
- shell 操作mysql資料庫MySql資料庫
- ABAP資料庫操作(轉)資料庫
- django多資料庫操作Django資料庫
- 【Mysql】改資料庫庫名操作MySql資料庫
- vb.net 存取資料庫中的圖片 (轉)資料庫