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++も初心者です
けど…)
過去ログ等も確認してみたのですが、見つからなかった(探し方が悪かったらゴメンなさい)、変
わりに、いい人達っぽいので質問してみました。
何かアドバイスをお願いいたします。
追記を書きにまいりました。
情報として役立つか分かりませんが、念のため…。
DB名_ pitdata.mdb
テーブル名称_ Gpit1
フィールド名称1_ REF_TIME(日付/時刻型 フォーマットはyyyy/mm/dd hh:nn)
フィールド名称2_ PICS_NAME(テキスト型 18文字まで可)
フィールド名称3_ REM_NAME(テキスト型 18文字まで可)
フィールド名称4_ REM_WEIGHT(数値型 単精度浮動小数点型)
となっています。
よろしくお願いいたします。
過去ログにこんなのありました
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200306/03060056.txt
の中に
>>Access2000 のMDBをAppWizardで処理しようと、しているけど
>>うまく認識してくれないみたいです
>「ツール」ー「データベースユーティリティ」ー「データベースの変換」
>ー「セキュリティ」ー「Microsoft Accessの旧バージョンのデータベースに変換」
>にすると認識してるようです。
はずしてますかね?
ありがとうございました。
woodさんの言ってたリンク先で、ウィザードが…って言ってたので、ウィザードを使って、そ
のソースを参考に見ていたら、私のと異なる点があったので、そこを直したら接続できました。
m_TIME = CTime::GetCurrentTime();←ここが0
return _T(ODBC;DSN=dbstep1);←データソース名が違っていました…凡ミスです。