ActiveConnection Property
Topic Last Modified: 2006-11-30
Returns the currently active Microsoft® ActiveX® Data Objects (ADO) Connection object.
Applies To
Type Library
Microsoft CDO for Exchange 2000 Library
DLL Implemented In
CDOEX.DLL
Syntax
Property ActiveConnection As ADODB.Connection
HRESULT get_ActiveConnection(_Connection** pVal);
HRESULT put_ActiveConnection(_Connection* Val);
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 (DataSource), 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.
Example
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.
' 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
// 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->Fields;
Fld = Flds->Item[variant_t("urn:schemas:httpmail:drafts")];
vDraftsURL = Fld->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 & "/" & relNewFolderURL, _
iDsrc_Fldr1.ActiveConnection, _
adModeReadWrite
If Err.Number <> 0 Then
' Folder must not exist...
Err.Clear
Err.Number = 0
iDsrc_Fldr2.SaveTo iDsrc_Fldr1.SourceURL & "/" & relNewFolderURL, _
iDsrc_Fldr1.ActiveConnection, _
adModeReadWrite
If Err.Number <> 0 Then
wscript.echo "Error creating folder: " & 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 & "/item8.eml", _
iDsrc_Fldr2.ActiveConnection, _
adModeReadWrite, _
adCreateOverwrite
Set SaveMessageToSubFolder = iFldr2
End Function