開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 コンソール アプリケーション
プロジェクト名 odbctest
アプリケーションの種類 コンソール アプリケーション
追加のオプション 空のプロジェクト
文字セット Unicode

sellike.c
#include <Windows.h>
#include <sqlext.h>
#include <locale.h>	// LC_TYPE
#include <stdio.h>	// EOF
#include <tchar.h>
 
#define DRIVER _T("Microsoft Access Driver (*.mdb)")
#define DATABASE _T("C:\\projects\\vc++\\odbctest\\odbctest.mdb")
 
//==============================================================================
int main()
{
	SQLHENV henv;	// 環境ハンドル
	SQLHDBC hdbc;	// 接続ハンドル
	SQLHSTMT hstmt;	// 命令ハンドル
	SQLRETURN rc;	// retcode
	SQLSMALLINT col;
	SQLSMALLINT c;
	SQLLEN len;
	_TCHAR stmttext[256];	// 命令文
	_TCHAR buf[76+1];
	int i;
 
	// ロケールを既定値に設定
	_tsetlocale(LC_CTYPE, _T(""));
 
	// 環境ハンドルの確保
	rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
 
	// データベースへの接続
	rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	rc = SQLDriverConnect(hdbc, NULL, _T("driver={") DRIVER _T("}; dbq=") DATABASE,
		SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
	if (!SQL_SUCCEEDED(rc)) {
		_ftprintf(stderr, _T("データベースへの接続に失敗しました\n"));
		return 1;
	}
 
	// 検索ループ
	while (1) {
		_tprintf(_T("町域名の一部(Ctrl-Zで終了)>"));
		i = _tscanf_s(_T("%76s"), buf, _countof(buf));
		if (i == EOF) break;
		_stprintf_s(stmttext, _countof(stmttext),
			_T("select * from 郵便番号データ where 町域名 like '%%%s%%'"), buf);
 
		rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
		rc = SQLExecDirect(hstmt, stmttext, SQL_NTS);
		if (SQL_SUCCEEDED(rc)) {
			rc = SQLNumResultCols(hstmt, &col);
			for (i = 0; ; i++) {
				rc = SQLFetch(hstmt);
				if (rc == SQL_NO_DATA) break;
				if (rc == SQL_ERROR) break;
				for (c = 1; c <= col; c++) {
					SQLGetData(hstmt, c, SQL_C_TCHAR,
						buf, _countof(buf), &len);
					if (len == SQL_NULL_DATA) buf[0] = _T('\0');
					_tprintf(_T("%s%c"), buf,
						(c == col) ? _T('\n') : _T(','));
				}
			}
			_tprintf(_T("該当:%d件\n"), i);
		} else {
			_tprintf(_T("検索に失敗しました\n"));
			_tprintf(_T("[%s]\n"), stmttext);
		}
		SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
	}
 
	// 終了処理
	SQLDisconnect(hdbc);
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
	SQLFreeHandle(SQL_HANDLE_ENV, henv);
	return 0;
}
 

出力
町域名の一部(Ctrl-Zで終了)>清原
09201,32132,3213231,トチギケン,ウツノミヤシ,キヨハラコウギョウダンチ,栃木県,宇都宮市,清原工業団地,0,
0,0,0,0,0
09201,32132,3213223,トチギケン,ウツノミヤシ,キヨハラダイ,栃木県,宇都宮市,清原台,0,0,1,0,0,0
該当:2件
町域名の一部(Ctrl-Zで終了)>東京
該当:0件
町域名の一部(Ctrl-Zで終了)>^Z
最終更新:2012年09月03日 08:27