|開発環境|Microsoft Visual C++ 2010 Express (SP1)| |実行環境|Microsoft Windows XP Home Edition (SP3)| |プロジェクトの種類|Win32 コンソール アプリケーション| |プロジェクト名|odbctest| |アプリケーションの種類|コンソール アプリケーション| |追加のオプション|空のプロジェクト| |文字セット|Unicode| 参考 [[データの取得>http://eternalwindows.jp/windevelop/odbc/odbc05.html]] [[郵便番号データダウンロード>http://www.post.japanpost.jp/zipcode/dl/kogaki.html]] [[Text File Driver Programming Considerations>http://msdn.microsoft.com/en-us/library/windows/desktop/ms714091(v=vs.85).aspx]] odbccsv.c #highlight(c){{ #include <fcntl.h> // _O_WTEXT #include <io.h> // _setmode #include <stdio.h> // _fileno #include <Windows.h> #include <sqlext.h> #include <tchar.h> #define DRIVER _T("Microsoft Text Driver (*.txt; *.csv)") #define DATABASE _T("C:\\projects\\vc++\\odbctest") #define TABLE _T("09TOCHIG.CSV") int main() { SQLHENV henv; // 環境 SQLHDBC hdbc; // 接続 SQLHSTMT hstmt; // 命令 SQLSMALLINT col; SQLSMALLINT i; SQLSMALLINT datatype; SQLTCHAR buf[256]; SQLLEN len; SQLRETURN rc; // retcode // BOMなしUTF-16LE _setmode(_fileno(stdout), _O_WTEXT); // データベースへの接続 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, (SQLTCHAR *) _T("driver={") DRIVER _T("}; dbq=") DATABASE, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); if (!SQL_SUCCEEDED(rc)) { return 1; } // 検索 rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); rc = SQLExecDirect(hstmt, (SQLTCHAR *) _T("select * from ") TABLE, SQL_NTS); if (!SQL_SUCCEEDED(rc)) { return 1; } rc = SQLNumResultCols(hstmt, &col); for (i = 1; i <= col; i++) { rc = SQLDescribeCol(hstmt, i, buf, _countof(buf), NULL, &datatype, NULL, NULL, NULL); _tprintf(_T("%d: %s %d\n"), i, buf, datatype); // Text 12 SQL_VARCHAR // Byte -6 SQL_TINYINT } while (1) { rc = SQLFetch(hstmt); if (rc == SQL_NO_DATA) break; if (rc == SQL_ERROR) break; for (i = 1; i <= col; i++) { SQLGetData(hstmt, i, SQL_C_TCHAR, buf, _countof(buf), &len); _tprintf(_T("%s%c"), buf, (i == col) ? _T('\n') : _T(',')); } } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); // 終了処理 SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); return 0; } }} schema.ini #highlight(){{ [09TOCHIG.CSV] ColNameHeader=False Format=CSVDelimited MaxScanRows=25 CharacterSet=OEM Col1=全国地方公共団体コード Text Col2=旧郵便番号 Text Col3=郵便番号 Text Col4=都道府県名カナ Text Col5=市区町村名カナ Text Col6=町域名カナ Text Col7=都道府県名 Text Col8=市区町村名 Text Col9=町域名 Text Col10=一町域が二以上の郵便番号で表される場合の表示 Byte Col11=小字毎に番地が起番されている町域の表示 Byte Col12=丁目を有する町域の場合の表示 Byte Col13=一つの郵便番号で二以上の町域を表す場合の表示 Byte Col14=更新の表示 Byte Col15=変更理由 Byte }}