ODBC経由でMSAccessに接続ができません

[戻る]
KW 2003/10/14(火) 20:09:31
ODBC経由で、Accessに接続をしようとしています。
環境は
VC6.0
WindowsNT4.0
Access2000
です。

http://homepage1.nifty.com/takuhiro/technique/programming/dbstep1/
↑のサイトを参照にして作成していました。
ウィザードの最中で、エラーがでてしまい、先に進めなくなったため、コードをダウンロードし
て、自分でコーディング始めました。

いろいろと調べているうちに、だいぶ分かってきて、エラーもなくなったのですが、起動する
と、DBに接続できませんでした。

エラーが発生しているとこは
BOOL DBTestFunc( void )
{
    CDBStep1    dbStep1 ;                    // データベースア
クセス クラス
    BOOL        dbRet ;                    
    // データベース処理戻り値用

    BOOL            bRet = TRUE ;

////// データベースオープン
//----- '1'
    try
    {
        dbRet = dbStep1.Open( AFX_DB_USE_DEFAULT_TYPE, 
dbStep1.GetDefaultSQL() ) ;//←ここです!!!!!!
    }
    catch( CDBException* e )    // 例外エラー発生
    {

        // エラーの処理
        ::MessageBox(NULL, e->m_strError, "DB Test", MB_OK);
        e->Delete();

        return FALSE ;
    }
の部分で、エラー処理を見ると、
{"データ ソース名および指定された既定のドライバが見つかりません。"}
でした。

データベースを設定している部分はこんな感じです。
#include "StdAfx.h"
#include "dbStepApp1.h"
#include "DBStep1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDBStep1
IMPLEMENT_DYNAMIC(CDBStep1, CRecordset)
CDBStep1::CDBStep1(CDatabase* pdb)
    : CRecordset(pdb)
{
    //{{AFX_FIELD_INIT(CDBStep1)
    m_PICS = _T("");
    m_RWEIGHT = 0.0f;
    m_RNAME = _T("");
    m_TIME = CTime::GetCurrentTime();
    m_nFields = 4;
    //}}AFX_FIELD_INIT
    m_nDefaultType = snapshot;
}
CString CDBStep1::GetDefaultConnect()
{
    return _T("ODBC;DSN=dbstep1");
}
CString CDBStep1::GetDefaultSQL()
{
    return _T("[Gpit1]");
}
void CDBStep1::DoFieldExchange(CFieldExchange* pFX)
{
    //{{AFX_FIELD_MAP(CDBStep1)
    pFX->SetFieldType(CFieldExchange::outputColumn);
    RFX_Text(pFX, _T("[PICS_NAME]"), m_PICS);
    RFX_Date(pFX, _T("[REF_TIME]"), m_TIME);
    RFX_Single(pFX, _T("[REM_WEIGHT]"), m_RWEIGHT);
    RFX_Text(pFX, _T("[REM_NAME]"), m_RNAME);
    //}}AFX_FIELD_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CDBStep1 診断
#ifdef _DEBUG
void CDBStep1::AssertValid() const
{
    CRecordset::AssertValid();
}
void CDBStep1::Dump(CDumpContext& dc) const
{
    CRecordset::Dump(dc);
}
#endif //_DEBUG

足りない情報がありましたら、遠慮なく言って下さい(ここの初心者です。…VC++も初心者です
けど…)
過去ログ等も確認してみたのですが、見つからなかった(探し方が悪かったらゴメンなさい)、変
わりに、いい人達っぽいので質問してみました。

何かアドバイスをお願いいたします。

KW 2003/10/14(火) 20:15:47
追記を書きにまいりました。
情報として役立つか分かりませんが、念のため…。

DB名_ pitdata.mdb
テーブル名称_ Gpit1
フィールド名称1_ REF_TIME(日付/時刻型 フォーマットは"yyyy/mm/dd hh:nn")
フィールド名称2_ PICS_NAME(テキスト型 18文字まで可)
フィールド名称3_ REM_NAME(テキスト型 18文字まで可)
フィールド名称4_ REM_WEIGHT(数値型 単精度浮動小数点型)

となっています。
よろしくお願いいたします。

wood 2003/10/14(火) 20:23:39
過去ログにこんなのありました

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200306/03060056.txt
の中に
>>Access2000 のMDBをAppWizardで処理しようと、しているけど
>>うまく認識してくれないみたいです

>「ツール」ー「データベースユーティリティ」ー「データベースの変換」
>ー「セキュリティ」ー「Microsoft Accessの旧バージョンのデータベースに変換」
>にすると認識してるようです。

はずしてますかね?

KW 2003/10/15(水) 08:58:47
[[解決]]
ありがとうございました。
woodさんの言ってたリンク先で、ウィザードが…って言ってたので、ウィザードを使って、そ
のソースを参考に見ていたら、私のと異なる点があったので、そこを直したら接続できました。

m_TIME = CTime::GetCurrentTime();←ここが0

return _T("ODBC;DSN=dbstep1");←データソース名が違っていました…凡ミスです。

古いスレッドには追加発言できません。