2013-10-14 146 views
0

需要關於vba代碼的幫助。請看下面的代碼。VBA:在lotus notes文檔中查看FTSearch語法

我想要查看QA \ QA Schedule中的所有文檔(1sep2013 - 30sep2013)。在這裏它不是文檔創建日期,它是從視圖的列中獲取的日期,以便我可以在Excel中拖動數據。

'下面是代碼,我已經構建了它正在搜索的代碼,它正在搜索所有文檔並讓我獲得花費大量時間的數據。如果可以在日期添加過濾器,我們可以做得更快一點,但我不知道FT搜索語法。如何在視圖列上使用它。請幫助它,這真的很緊迫。

Dim nSess As Object 'NotesSession 
Dim sPwd As String 
Dim strCnxn As String 
Dim strSQL As String 
Dim db As Object 
Dim iviews As Object 
Dim IView As Object 
Set nSess = CreateObject("Lotus.NotesSession") 'New:{29131539-2EED-1069-BF5D-  00DD011186B7} 
myUsername = **** 
myPassword = **** 
DSN1 = ("Driver={Lotus NotesSQL Driver (*.nsf)};Server=;Database=;Uid=" & myUsername & ";Pwd=" & myPassword & ";") 
Call nSess.Initialize(sPwd) 
Set db = nSess.GetDatabase("", "") 
Set iviews = db.GetView("QA\QA Schedule") 
iviews.AutoUpdate = False 
Set IView = iviews.AllEntries 

Set viewparentEntry = IView.Parent 

Set viewEntry = viewparentEntry.GetFirstDocument 
For i = 1 To IView.Count 

Colval = viewEntry.ColumnValues() 
For j = 0 To 20 
If Colval(0) <> "2013 9" Then 
Exit For 
ElseIf Colval(18) >= "" Or Colval(18) <= "" Then 
Exit For 
ElseIf Colval(18) >= "09/01/2013" Or Colval(18) <= "09/30/2013" Then 
Sheets("Sheet2").Cells(RowCount, colcount).Value = Colval(j) 
colcount = colcount + 1 
Else 
Exit For 
End If 
Next 
j = 0 
colcount = 1 
RowCount = RowCount + 1 
Set viewEntry = viewparentEntry.GetNextDocument(viewEntry) 
Next 
+0

什麼是視圖列的公式?如果它只是指存儲在文檔中的日期時間字段,那麼您應該可以使用FTSearch語法。如果不是,那麼它可能會很棘手。 –

+0

我不知道如何在VBA中使用FTsearch語法。 Exec_date是視圖中的列。所以我如何使用這裏的FTsearch語法.. –

+0

您可以使用NotesDatabase類的FTSearch方法。你可以在這裏找到文檔:http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp?topic=%2Fcom.ibm.designer.domino.main.doc%2FH_FTSEARCH_METHOD_DB.html –

回答

1

有幾個選項:

這裏有讓你從一個全文搜索在視圖上返回的文檔集合的例子:

Dim db As Object 
Dim iviews As Object 
Dim IView As Object 
Dim doc as NotesDocument 
Set nSess = CreateObject("Lotus.NotesSession") 'New:{29131539-2EED-1069-BF5D-  00DD011186B7} 
myUsername = **** 
myPassword = **** 
DSN1 = ("Driver={Lotus NotesSQL Driver (*.nsf)};Server=;Database=;Uid=" & myUsername & ";Pwd=" & myPassword & ";") 
Call nSess.Initialize(sPwd) 
Set db = nSess.GetDatabase("", "") 
Set iviews = db.GetView("QA\QA Schedule") 
iviews.AutoUpdate = False 
iviews.FTSearch("[SomeDate] >= 9/1/2013 And [SomeDate] <= 9/30/2013") 

Set doc = iviews.GetFirstDocument 
While Not (doc Is Nothing) 
    // Do something here for each document 

    Set doc = iviews.GetNextDocument(doc) 
Wend 
+0

NotesView.FTSearch返回找到的文檔數量,而不是集合。而不是dc.GetFirstDocument,你必須使用iviews。GetFirstDocument。其次,字段名必須括在括號內,如[SomeDate]。第三,數據庫必須啓用全文搜索。最後,如果你很少需要查詢(每天只說一次),並且它是一個後臺代理,那麼你可以更好地使用標準的搜索方法。 –

+0

感謝漢堡, 但是,如果你可以幫助給我一個適當的VBA語法,這將真正幫助我完整。此外,我想知道下面的順序是正確的或not.In我看來SomeDate = AQAEXECDATE 設置的iView = db.GetView( 「QA \ QA時間表」) iviews.AutoUpdate =假 套裝DC = iviews.FTSearch (「SomeDate> = 2013年9月1日和SomeDate <= 9/30/2013」​​) –

+0

謝謝D.Bugger。我已經更新了我的答案以修復FTSearch方法的使用。我也注意到我的鏈接無效,所以我也修正了這個問題。 @MoshinHilalKondkari,現在看一看,看看這是否回答你關於順序的問題。您首先需要調用FTSearch來過濾視圖,然後遍歷while/wend塊內視圖中的所有文檔。只需用您的字段名稱替換「SomeDate」一詞。 –