okamoです。
VC++でADOを利用し
AccessのMdbに接続しDBの操作を行うクラスを作成しています。
現段階では、
Open関数でmdbファイルに接続がうまくいきません。
例外処理になってしまいます。
Open(Provider=Microsoft.Jet.OLEDB.3.51,Data Source= + m_mdbFileName(DBのファイルパス名) + LoginId(NULL),Password(NULL),Option)
で呼び出しています。
どうか、ご教授お願いします。
void CCustomRs::CConnectionD()
{
CString mdbFileName;
// HRESULT hr;
IADORecordBinding *picRs = NULL;
//comライブラリの使用の開始!!
CoInitialize(NULL); //ポインタの初期化を行う。
_RecordsetPtr pRs = NULL;
_ConnectionPtr pConn = NULL;
pConn.CreateInstance(__uuidof(Connection)); // コネクションインターフェースの生成
try
{
CCustomRs rs;
// 手順 1接続を開く
CString str1;
CString mdbLoginName;
CString mdbPassword;
_bstr_t strCnn(LProvider=Microsoft.Jet.OLEDB.3.51,Data Source= + m_mdbFileName + ;);
pConn->Open(strCnn,NULL,NULL,adModeUnknown);
// _bstr_t(LProvider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\\tysdbvc\\vcdb.mdb;),
// NULL, NULL);)
pConn->Close();
CoUninitialize(); //comライブラリのクローズ!!ADOを使用した処理が全て終了するのね。
}
解決しました。
void CCustomRs::CConnectionD()
{
bool IsConnectionOpen ;
_ConnectionPtr pConnection ;
_RecordsetPtr pRecordset ;
long Ret ; // 下位関数からの戻り値
HRESULT hr ; // 下位関数からの戻り値
IsConnectionOpen = FALSE ; // 接続状態フラグ初期化
Ret = (long)AfxOleInit() ; // OLE DLL を初期化
if( Ret!=0 ) {
// return( -1 ) ;
}
// 接続文字列の設定
_bstr_t bstrSource( Provider=Microsoft.Jet.OLEDB.4.0; Data Source= + m_mdbFileName + ; ) ;
_bstr_t bstrUser( " ) ; // ユーザ名の取得
_bstr_t bstrPassword( " ) ; // パスワードの取得
try {
if( IsConnectionOpen==FALSE ) { // 接続状態チェック
// ADOクラスインスタンスの作成
hr = pConnection.CreateInstance( __uuidof( Connection ) );
if (SUCCEEDED(hr)) {
// データベースへの接続
hr = pConnection->Open(bstrSource,
bstrUser, bstrPassword, adModeUnknown);
if (SUCCEEDED(hr)) {
IsConnectionOpen = TRUE ;
}
else {
IsConnectionOpen = FALSE ;
}
}
}
}
catch (_com_error &e)
{
dump_com_error(e);
}
if( IsConnectionOpen==TRUE ) {
// BSTR bstrSQL = NULL ;
}
}
こんなソースです。