fork download
  1. // odbctest.c
  2. // VC++ 2010 Express
  3. // マルチバイト文字セット
  4.  
  5. #define _CRT_SECURE_NO_WARNINGS
  6.  
  7. #include <Windows.h>
  8. #include <sqlext.h>
  9. #include <odbcinst.h>
  10. #include <stdio.h>
  11. #include <io.h>
  12.  
  13. #define DRIVER "Microsoft Access Driver (*.mdb)"
  14. #define DATABASE "C:\\projects\\vc++\\odbctest\\odbctest.mdb"
  15.  
  16. int main()
  17. {
  18. HENV henv;
  19. HDBC hdbc;
  20. HSTMT hstmt;
  21. SQLCHAR CompliteConnect[255];
  22. SWORD len;
  23. SQLCHAR value[256];
  24. SQLINTEGER strlen;
  25. RETCODE rc;
  26. BOOL b;
  27. char c;
  28. int i;
  29.  
  30. // データベースの作成
  31. if (_access(DATABASE, 0) == 0) {
  32. printf("remove %s (y)", DATABASE);
  33. scanf("%c", &c);
  34. if (c != 'y') return 1;
  35. remove(DATABASE);
  36. }
  37. b = SQLConfigDataSource(NULL, ODBC_ADD_DSN, DRIVER,
  38. "create_db="DATABASE" general\0");
  39.  
  40. // データベースへの接続
  41. rc = SQLAllocEnv(&henv);
  42. rc = SQLAllocConnect(henv, &hdbc);
  43. rc = SQLDriverConnect(hdbc, NULL,
  44. (SQLCHAR *)"Driver={"DRIVER"}; DBQ="DATABASE,
  45. SQL_NTS, CompliteConnect, _countof(CompliteConnect), &len, SQL_DRIVER_NOPROMPT);
  46. if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
  47. fprintf(stderr, "データベースファイルを開けません\n");
  48. return 1;
  49. }
  50.  
  51. // テーブルの作成
  52. rc = SQLAllocStmt(hdbc, &hstmt);
  53. rc = SQLExecDirect(hstmt, (SQLCHAR *)
  54. "create table 郵便番号データ ("
  55. "郵便番号 text(7), "
  56. "都道府県名 text, "
  57. "市区町村名 text, "
  58. "町域名 text, "
  59. "町域分割 short, "
  60. "小字起番 short, "
  61. "丁目町域 short, "
  62. "複数町域 short, "
  63. "更新表示 short, "
  64. "変更理由 short)"
  65. , SQL_NTS);
  66. if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
  67. fprintf(stderr, "テーブルの作成に失敗しました\n");
  68. return 1;
  69. }
  70.  
  71. // レコードの追加
  72. rc = SQLExecDirect(hstmt, (SQLCHAR *)
  73. "insert into 郵便番号データ values ("
  74. "'5850054','大阪府','南河内郡千早赤阪村','吉年',0,0,0,0,0,0"
  75. ")", SQL_NTS);
  76. if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
  77. fprintf(stderr, "レコードの追加に失敗しました\n");
  78. return 1;
  79. }
  80.  
  81. // 検索
  82. rc = SQLExecDirect(hstmt, (SQLCHAR *)"select * from 郵便番号データ", SQL_NTS);
  83. while (1) {
  84. rc = SQLFetch(hstmt);
  85. if (rc == SQL_NO_DATA) break;
  86. if (rc == SQL_ERROR) break;
  87. for (i = 1; i <= 4; i++) {
  88. SQLGetData(hstmt, i, SQL_C_CHAR, value, _countof(value), &strlen);
  89. printf("%s,", value);
  90. }
  91. printf("\n");
  92. }
  93.  
  94. rc = SQLFreeStmt(hstmt, SQL_DROP);
  95. rc = SQLDisconnect(hdbc);
  96. rc = SQLFreeConnect(hdbc);
  97. rc = SQLFreeEnv(henv);
  98.  
  99. return 0;
  100. }
  101.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty