Searching/Listing Items (ADO)
Topic Last Modified: 2006-06-12
Example
Visual Basic
Note
The following example uses a file URL with the Exchange OLE DB (ExOLEDB) provider. The ExOLEDB provider also supports The HTTP: URL Scheme. Using The HTTP: URL Scheme allows both client and server applications to use a single URL scheme.
'Searching/Listing Items Using ADO
'This sample shows how to search objects.
'
'Make reference to the ADO 2.5 library.
'Make reference to Active DS Type Library.
Private Sub SearchItems()
On Error GoTo Errorhandler
Dim strDomainName As String
Dim strUser As String
Dim strPathOfSourceFolder As String
Dim strSourceFolderUrl As String
Dim strSearchSql As String
' Specify the domain and user.
strDomainName = GetDomainDNSName()
' Note: the user must exist for this sample to work.
strUser = "user1"
' Sample 1: List Appointments in Calendar
strPathOfSourceFolder = "MBX/" & strUser & "/Calendar"
strSourceFolderUrl = "file://./backofficestorage/" & _
strDomainName & "/" & strPathOfSourceFolder
' Create the SQL query for the recordset (appointments).
strSearchSql = "select "
strSearchSql = strSearchSql & " ""urn:schemas:mailheader:content-class"""
strSearchSql = strSearchSql & ", ""DAV:href"""
strSearchSql = strSearchSql & ", ""DAV:displayname"""
strSearchSql = strSearchSql & ", ""DAV:isfolder"""
strSearchSql = strSearchSql & ", ""DAV:iscollection"""
strSearchSql = strSearchSql & ", ""urn:schemas:httpmail:subject"""
strSearchSql = strSearchSql & " from scope ('shallow traversal of " & Chr(34)
strSearchSql = strSearchSql & strSourceFolderUrl & """') "
strSearchSql = strSearchSql & " WHERE ""DAV:ishidden"" = false"
strSearchSql = strSearchSql & " AND ""DAV:isfolder"" = false"
Call SearchListObjects(strDomainName, strPathOfSourceFolder, strSearchSql)
' Sample 2: List Contacts in Ccontacts.
strPathOfSourceFolder = "MBX/" & strUser & "/Contacts"
strSourceFolderUrl = "file://./backofficestorage/" & _
strDomainName & "/" & strPathOfSourceFolder
' Create the SQL query for the recordset (appointments).
strSearchSql = "select "
strSearchSql = strSearchSql & " ""urn:schemas:mailheader:content-class"""
strSearchSql = strSearchSql & ", ""DAV:href"""
strSearchSql = strSearchSql & ", ""DAV:displayname"""
strSearchSql = strSearchSql & ", ""DAV:isfolder"""
strSearchSql = strSearchSql & ", ""DAV:iscollection"""
strSearchSql = strSearchSql & ", ""urn:schemas:httpmail:subject"""
strSearchSql = strSearchSql & " from scope ('shallow traversal of " & Chr(34)
strSearchSql = strSearchSql & strSourceFolderUrl & """') "
strSearchSql = strSearchSql & " WHERE ""DAV:ishidden"" = false"
strSearchSql = strSearchSql & " AND ""DAV:isfolder"" = false"
' Call SearchListObjects(strDomainName, strPathOfSourceFolder, strSearchSql).
' Sample 3: List Travel all subfolders of MBX under the user
'strPathOfSourceFolder = "MBX/" & strUser
strPathOfSourceFolder = "MBX/" & strUser & "/Deleted Items"
strSourceFolderUrl = "file://./backofficestorage/" & _
strDomainName & "/" & strPathOfSourceFolder
' Create the SQL query for the recordset (appointments).
strSearchSql = "select "
strSearchSql = strSearchSql & " ""urn:schemas:mailheader:content-class"""
strSearchSql = strSearchSql & ", ""DAV:href"""
strSearchSql = strSearchSql & ", ""DAV:displayname"""
strSearchSql = strSearchSql & ", ""DAV:isfolder"""
strSearchSql = strSearchSql & ", ""DAV:iscollection"""
strSearchSql = strSearchSql & " from scope ('shallow traversal of " & Chr(34)
strSearchSql = strSearchSql & strSourceFolderUrl & """') "
strSearchSql = strSearchSql & " WHERE ""DAV:ishidden"" = false"
' This can be omitted.
strSearchSql = strSearchSql & " AND ""DAV:isfolder"" = true"
strSearchSql = strSearchSql & " AND ""DAV:iscollection"" = true"
Call SearchListObjects(strDomainName, strPathOfSourceFolder, strSearchSql)
GoTo Ending
Errorhandler:
Debug.Print "Error: " + Str(Err.Number) + " " + Err.Description
Err.Clear
Ending:
End Sub
Private Sub SearchListObjects(strDomainName As String, strLocalPathOfSourceFolder As String, strSearchSql As String)
Dim Rec As New ADODB.Record
Dim Rst As New ADODB.Recordset
Dim strSourceFolderUrl As String
' Set the URL to the location of the folder.
strSourceFolderUrl = "file://./backofficestorage/" & _
strDomainName & "/" & strLocalPathOfSourceFolder
' Open the record.
Rec.Open strSourceFolderUrl, , adModeReadWrite 'Move needs parameter adModeReadWrite
' Open recordset - a list of objects.
Rst.Open strSearchSql, Rec.ActiveConnection
' Check to see if any objects were found.
If Rst.RecordCount = 0 Then
Debug.Print "No objects found!"
Exit Sub
End If
' Some objects have been found.
Rst.MoveFirst
Do While Not Rst.EOF
Dim strObjectUrl As String
Dim strContentClass As String
' Retrieve some properties.
strObjectUrl = Rst.Fields("DAV:href")
strContentClass = Rst.Fields("urn:schemas:mailheader:content-class")
Debug.Print "ContectClass : " & strContentClass
If Rst.Fields("DAV:iscollection") = True Then
Debug.Print "FolderName : " & Rst.Fields("DAV:displayname")
' Retrieve the Folder Type property.
Dim iFolder As New CDO.Folder
iFolder.DataSource.Open strObjectUrl
Debug.Print "FolderType : " & iFolder.Fields("https://schemas.microsoft.com/exchange/outlookfolderclass") & vbLf
Set iFolder = Nothing
Else
Select Case strContentClass
Case "urn:content-classes:message"
Dim iMessage As New CDO.Message
iMessage.DataSource.Open strObjectUrl
' Display some properties.
Debug.Print "Message" & vbLf & _
"Sender: " & iMessage.Sender & vbLf & _
"Subject: " & iMessage.Subject & vbLf & _
"DateRecdeived: " & iMessage.ReceivedTime & vbLf & vbLf
Set iMessage = Nothing
Case "urn:content-classes:person"
Dim iPerson As New CDO.Person
iPerson.DataSource.Open strObjectUrl
' Display some properties.
Debug.Print "Person" & vbLf & _
"First Name: " & iPerson.FirstName & vbLf & _
"Last Name: " & iPerson.LastName & vbLf & _
"Title: " & iPerson.Title & vbLf & _
"Company: " & iPerson.Company & vbLf & vbLf
Set iPerson = Nothing
Case "urn:content-classes:appointment"
Dim iAppointment As New CDO.Appointment
iAppointment.DataSource.Open strObjectUrl
' Display some properties.
Debug.Print "Appointment" & vbLf & _
"Subject: " & iAppointment.Subject & vbLf & _
"Location: " & iAppointment.Location & vbLf & _
"StartTime: " & iAppointment.StartTime & vbLf & _
"EndTime: " & iAppointment.EndTime & vbLf & vbLf
Set iAppointment = Nothing
Case Else
Debug.Print "The case :" & strContentClass & " is not included here"
End Select
End If
Rst.MoveNext
Loop
' Close the connections.
Rst.Close
Rec.Close
' Clean up.
Set Rst = Nothing
Set Rec = Nothing
End Sub
Private Function GetDomainDNSName() As String
Dim Info As New ADSystemInfo
Dim strDomain As String
strDomain = Info.DomainDNSName
GetDomainDNSName = strDomain
End Function