中文字幕天天躁日日躁狠狠躁,最近中文字幕大全免费版在线,最近2019免费中文字幕视频三,亚洲精品无码你懂的,亚洲国产精品成人精品小说

  • 相關(guān)軟件
    >VB操作LotusNotes數(shù)據(jù)庫 創(chuàng)建者:webmaster 更新時間:2005-05-18 00:00

    今天,異構(gòu)數(shù)據(jù)環(huán)境已經(jīng)是一個普遍存在的問題,Windows常用開放數(shù)據(jù)庫互連標(biāo)準(zhǔn)ODBC進(jìn)行數(shù)據(jù)交換與操作,后來微軟又推出了ADO技術(shù),例如用VB操作Oracle、Sybase和SQL Server等,其應(yīng)用也越來越普遍。

    辦公自動化軟件中常用的數(shù)據(jù)庫系統(tǒng)Lotus Notes,屬于非關(guān)系數(shù)據(jù)庫管理系統(tǒng),具有以下特點:

    1. 基于文檔組織模式;

    2. 使用非結(jié)構(gòu)化的數(shù)據(jù)元素;

    3. 通過定時復(fù)制刷新數(shù)據(jù);

    4. 使用視圖定位數(shù)據(jù);

    5. 通過全文檢索訪問數(shù)據(jù)。

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

    在Notes中使用COM和OLE

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

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

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


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

    同時在Form上放一個FlexGrid控件,產(chǎn)生一個如圖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庫,請查看系統(tǒng)設(shè)置!”)

    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 = “處理責(zé)任人”

    .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

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

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

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

    按鍵盤F5開始運(yùn)行,就可以看到輸出結(jié)果。

    VB操作Domino COM的優(yōu)缺點

    VB操作Domino COM具有以下優(yōu)點:

    ● VB應(yīng)用程序不需要調(diào)用Lotus Notes客戶端就可以訪問Notes的函數(shù);

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

    ● COM的運(yùn)行速度比Lotus Script快;

    ● 可以獨立于Lotus Notes客戶端進(jìn)行應(yīng)用程序分發(fā)。

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

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

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

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

    ● Lotus 提供的COM并不支持“ref”內(nèi)存指針,標(biāo)準(zhǔn)COM提供三種內(nèi)存指針:“ref”、“unique”和“ptr”,其中“ref”開銷最小。

    結(jié) 論

    采用COM作為VB與Domino的橋梁,既可以發(fā)揮Domino的強(qiáng)大的文檔處理能力,又可以發(fā)揮VB友好的可視化功能。文中例子是筆者實際工作中使用過的,該設(shè)計采用R5.05和VB6開發(fā)工具,在Win98、NT和Win2000下均工作正常。
    相關(guān)文章
    本頁查看次數(shù):