fork(1) download
  1. // create_db.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. #define CSVFILE "osaka.csv"
  16.  
  17. int main()
  18. {
  19. HENV henv;
  20. HDBC hdbc;
  21. HSTMT hstmt;
  22. SQLCHAR CompliteConnect[255];
  23. SWORD len;
  24. SQLCHAR sqlchar[256];
  25. SQLINTEGER strlen;
  26. RETCODE rc;
  27. BOOL b;
  28. FILE *fp;
  29. char line[1024];
  30. char number[7+1];
  31. char todofuken[20];
  32. char sikutyoson[100];
  33. char tyoiki[100];
  34. char addr[200];
  35. char c;
  36. int i;
  37.  
  38. // データベースの作成
  39. if (_access(DATABASE, 0) == 0) {
  40. printf("remove %s (y)", DATABASE);
  41. scanf("%c", &c);
  42. if (c != 'y') return 1;
  43. remove(DATABASE);
  44. }
  45. b = SQLConfigDataSource(NULL, ODBC_ADD_DSN, DRIVER, "create_db="DATABASE"\0");
  46. if (b == FALSE) {
  47. fprintf(stderr, "データベースの作成に失敗しました\n");
  48. return 1;
  49. }
  50.  
  51. // データベースへの接続
  52. rc = SQLAllocEnv(&henv);
  53. rc = SQLAllocConnect(henv, &hdbc);
  54. rc = SQLDriverConnect(hdbc, NULL,
  55. (SQLCHAR *)"Driver={"DRIVER"}; DBQ="DATABASE,
  56. SQL_NTS, CompliteConnect, _countof(CompliteConnect), &len, SQL_DRIVER_NOPROMPT);
  57. if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
  58. fprintf(stderr, "データベースファイルを開けません\n");
  59. return 1;
  60. }
  61.  
  62. // テーブルの作成
  63. rc = SQLAllocStmt(hdbc, &hstmt);
  64. rc = SQLExecDirect(hstmt, (SQLCHAR *)
  65. "create table 郵便番号データ ("
  66. "郵便番号 text(7),"
  67. "住所 text)"
  68. , SQL_NTS);
  69. if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
  70. fprintf(stderr, "テーブルの作成に失敗しました\n");
  71. return 1;
  72. }
  73.  
  74. // レコードの追加
  75. fp = fopen(CSVFILE, "r");
  76. if (fp == NULL) {
  77. fprintf(stderr, "%sがありません\n", CSVFILE);
  78. return 1;
  79. }
  80. for (;;) {
  81. i = fscanf(fp, "%[^,],%[^,],%[^,],%[^,],%s\n",
  82. number, todofuken, sikutyoson, tyoiki, line);
  83. if (i == EOF) break;
  84. sprintf(addr, "%s%s%s", todofuken, sikutyoson, tyoiki);
  85. sprintf((char *)sqlchar,
  86. "insert into 郵便番号データ values ('%s','%s')",
  87. number, addr);
  88. rc = SQLExecDirect(hstmt, sqlchar, SQL_NTS);
  89. if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
  90. fprintf(stderr, "レコードの追加に失敗しました\n");
  91. return 1;
  92. }
  93. }
  94. rc = SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT);
  95. fclose(fp);
  96.  
  97. // 検索
  98. rc = SQLExecDirect(hstmt, (SQLCHAR *)"select * from 郵便番号データ", SQL_NTS);
  99. while (1) {
  100. rc = SQLFetch(hstmt);
  101. if (rc == SQL_NO_DATA) break;
  102. if (rc == SQL_ERROR) break;
  103. for (i = 1; i <= 2; i++) {
  104. SQLGetData(hstmt, i, SQL_C_CHAR, sqlchar, _countof(sqlchar), &strlen);
  105. printf("%s,", sqlchar);
  106. }
  107. printf("\n");
  108. }
  109.  
  110. rc = SQLFreeStmt(hstmt, SQL_DROP);
  111. rc = SQLDisconnect(hdbc);
  112. rc = SQLFreeConnect(hdbc);
  113. rc = SQLFreeEnv(henv);
  114.  
  115. return 0;
  116. }
  117.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty