Partager via


ActiveConnection Property

ActiveConnection Property

This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.

Returns the currently active Microsoft ActiveX Data Objects (ADO) Connection object.

Applies To

IDataSource Interface

Type Library

Microsoft CDO for Exchange 2000 Library

DLL Implemented In

CDOEX.DLL

Syntax

[Visual Basic]Property ActiveConnection As ADODB.Connection

[C++]HRESULT get_ActiveConnection(Connection** pVal);
HRESULT put
ActiveConnection(_ConnectionVal);

Parameters

  • pVal
    Returned reference to a _Connection Interface.
  • Val
    Sets the value of the ActiveConnection property to the value of the _Connection Interface.

Remarks

This property contains the _Connection interface on an ADO Connection object associated with the currently bound data source. This connection exists only after directly binding the object to a data source specified using a URL (using an OLE DB 2.5 Provider) with calls to the Open Method, the SaveTo Method, and the SaveToContainer Method.

An ActiveConnection object reference is not available when the object is bound to another object after using the OpenObject Method or the SaveToObject Method, even if that object has an associated Connection object. Attempting to access the ActiveConnection property in such cases will cause the exception to be raised. For example, if you use IDataSource.OpenObject to bind a Collaboration Data Objects (CDO) object to an ADO Record object that is itself currently bound to an item in the Exchange store or Microsoft Active Directory, the Record object's Connection object is not available through the IDataSource.ActiveConnection property.

Examples

This Microsoft Visual Basic example uses a file URL with the Microsoft ExchangeOLE DB (ExOLEDB) provider. The ExOLEDB provider also supports The HTTP: URL Scheme.

[Visual Basic]

' Reference to Microsoft CDO for Exchange 2000 Library ' Reference to Microsoft ActiveX Data Objects 2.5 Library

Dim iFldr As New Folder
Dim iDsrc As CDO.IDataSource
Set iDsrc = iFldr

' Open the folder. For example:
' Url1 = "file://./backofficestorage/example.com/MBX/useralias/"

Dim Conn As New ADODB.Connection
Conn.Provider = "ExOLEDB.DataSource"
Conn.Open Url1

iDsrc.Open Url1, Conn, adModeReadWrite

Dim iMsg As New CDO.message
With iMsg
    .To = "someone@example.com"
    .From = "another@example.com"
    .Subject = "Here is the subject"
    .TextBody = "Here is the text of the message"
End With

Set iDsrc = iMsg

' Note: it is possible to overwrite an existing item using adCreateOverwrite.
iDsrc.SaveTo URL1 & "/Drafts/item8.eml", _
            Conn, _
            adModeReadWrite, _
            adCreateOverwrite

Conn.Close
Set Conn = Nothing

[C++]

// You must have the following paths in your INCLUDE path. // %CommonProgramFiles%\system\ado // %CommonProgramFiles%\microsoft shared\cdo

#ifndef _CORE_EXAMPLE_HEADERS_INCLUDED #define _CORE_EXAMPLE_HEADERS_INCLUDED #import <msado15.dll> no_namespace #import <cdoex.dll> no_namespace #include <iostream.h> #endif

// Note: It is recommended that all input parameters be validated when they are // first obtained from the user or user interface. void SaveMessageToDrafts(bstr_t mailboxURL, IMessagePtr pMsg) {

IDataSourcePtr pDsrc; IDataSourcePtr pDsrc2; _ConnectionPtr pConn(__uuidof(Connection)); IFolderPtr pFolder(__uuidof(Folder)); FieldsPtr Flds; FieldPtr Fld; variant_t vDraftsURL;

// You may need the following for passing optional variants. _variant_t varOpt(DISP_E_PARAMNOTFOUND,VT_ERROR);

pConn->Provider = "ExOLEDB.DataSource"; try { pConn->Open(mailboxURL,bstr_t(),bstr_t(),-1); } catch(_com_error e) { throw e; }

// Bind to the information store root folder (private/messages). // For example, URL1 below is something like // "file://./backofficestorage/example.com/storename/username/"

cout << "Opening " << mailboxURL << endl;

pDsrc = pFolder;

try { pDsrc->Open( mailboxURL, _variant_t((IDispatch*)pConn, true), adModeRead, adFailIfNotExists, (RecordOpenOptionsEnum)adOpenSource, bstr_t(), bstr_t() );

  Flds = pFolder-&gt;Fields;
  Fld = Flds-&gt;Item[variant_t("urn:schemas:httpmail:drafts")];
  vDraftsURL = Fld-&gt;Value;

} catch(_com_error e) { cerr << "Error opening Mailbox folder" << endl; throw e; }

  // Get ActiveConnection for the bound collection resource
  // (the root of private folders for the user).

pConn = pDsrc->ActiveConnection;

// Get IDataSource on the passed message object. pDsrc2 = pMsg;

// Save this message to some folder. // Use the current connection to bind the above folder.

try { pDsrc2->SaveToContainer( bstr_t(vDraftsURL),

        //Connection from Folder Bind above
        _variant_t((IDispatch*)pConn, true),
        adModeReadWrite,
        adCreateNonCollection,
        (RecordOpenOptionsEnum) NULL,
        bstr_t(),
        bstr_t()
  );

} catch(_com_error e) { cerr << "Error saving message to Drafts folder!" << endl; throw e; }

// Close the connection. pConn->Close(); }

' This example demonstrates sharing a Connection object from a ' bound CDO Folder object and a CDO Message object. ' ' Type information must have been imported into the scripting engine, ' for example: ' <reference object="adodb.record"/> ' <reference object="cdo.message"/> ' elements in a Windows Script Host (.wsf) file.

Function SaveMessageToSubFolder(iMsg, iFldr1, relNewFolderURL)

Dim iDsrc_Msg
Dim iDsrc_Fldr1
Dim iDsrc_Fldr2

Dim iFldr2
Set iFldr2 = CreateObject("CDO.Folder")

' First create the new sub-folder using the currently bound Folder object's connection:
Set iDsrc_Fldr1 = iFldr1.DataSource
Set iDsrc_Fldr2 = iFldr2.DataSource

On Error Resume Next
iDsrc_Fldr2.Open iDsrc_Fldr1.SourceURL &amp; "/" &amp; relNewFolderURL, _
                 iDsrc_Fldr1.ActiveConnection, _
                 adModeReadWrite

If Err.Number &lt;&gt; 0 Then
 ' Folder must not exist...
 Err.Clear
 Err.Number = 0
 iDsrc_Fldr2.SaveTo iDsrc_Fldr1.SourceURL &amp; "/" &amp; relNewFolderURL, _
                    iDsrc_Fldr1.ActiveConnection, _
                    adModeReadWrite

 If Err.Number &lt;&gt; 0 Then
   wscript.echo "Error creating folder: " &amp; Err.Description
   ' Handle Error and Quit
   wscript.quit
 End If
End If

On Error Goto 0

' Save the message to the folder as say "item8.eml"
Set iDsrc_Msg = iMsg.DataSource

' Note: it is possible to overwrite an existing item using adCreateOverwrite.
iDsrc_Msg.SaveTo iDsrc_Fldr2.SourceURL &amp; "/item8.eml", _
            iDsrc_Fldr2.ActiveConnection, _
            adModeReadWrite, _
            adCreateOverwrite

Set SaveMessageToSubFolder = iFldr2

End Function

Send us your feedback about the Microsoft Exchange Server 2003 SDK.

Build: June 2007 (2007.618.1)

© 2003-2006 Microsoft Corporation. All rights reserved. Terms of use.