開発環境 |
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