C言語からODBC経由でデータ(レコード?)の追加を行いたいのですが・・。
エラーが出て進めません。
ソースは下記の通りです。
ご解説宜しくお願い致します。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <tchar.h>
#define DATASORCE "OracleDataBasic" //データソース名
#define USER_ID "WRX" //ユーザーID名
#define PASSWORD "STI" //パスワード名
#define RESET 0 //初期化用マクロ
#define TEST_RECORD 7 //レコード数
#pragma comment(lib, "odbc32.lib") //ODBC使用時用ライブラリ
struct person{
char name[20];
char code[20];
char num[20];
char money[20];
};
int main(int argc, char **argv){
/*変数宣言?*/
SQLHENV henv;
SQLHDBC hdbc;
SQLRETURN sqlrc;
HSTMT hstmt = RESET;
RETCODE rc = RESET;
struct person dt[TEST_RECORD];
struct person save;
int iCount = RESET;
int i = RESET;
char insert_test[200];
char char_int[10];
//初期化?
memset(dt, 0x00,sizeof(dt));
memset(&save, 0x00,sizeof(&save));
memset(insert_test,0,sizeof(insert_test));
memset(char_int,0,sizeof(char_int));
SQLAllocEnv(&henv); //環境ハンドルの割り当て
SQLAllocConnect(henv, &hdbc); //接続ハンドルの割り当て
/*接続処理及び接続結果判定*/
sqlrc = SQLConnect(hdbc,_T(DATASORCE), SQL_NTS,_T(USER_ID), SQL_NTS, _T(PASSWORD), SQL_NTS);//SQL接続
if (sqlrc != SQL_SUCCESS && sqlrc != SQL_SUCCESS_WITH_INFO) { //SQLに接続出来なかった時
SQLDisconnect(hdbc); // ODBC接続を切断
SQLFreeConnect(hdbc); // ODBC接続状態のメモリを開放
SQLFreeEnv(henv); // ODBC環境のメモリを開放
return 9;
}
printf("a\n");
SQLAllocStmt(hdbc, &hstmt);
strcpy(insert_test,"insert into atm values('北条','3420','00000020',\'");
strcpy(char_int,"3420");
strcat(insert_test,char_int);
strcat(insert_test,"\');");
/*SQL処理実施*/
//データ追加分
if(SQLExecDirect(hstmt, _T(insert_test), SQL_NTS) == SQL_SUCCESS){ //※ここのinsert_testがおそらく問題点です。
printf("成功");
}else{
printf("失敗");
}
/*ODBC接続処理入れます*/
return 0;
}
使用環境:
C言語:Visual Studio 2008
oracle:Oracle in XE(10g)
(Oracleのデータソース名:OracleDataBasic ユーザーID:WRX
なお、_T(insert_test)を_T("insert into atm values('北条','3420','00000020','10'")にすると
いけました。
修正後(該当部分のみ)のソースを見せていただけると幸いです。
ご解説宜しくお願い致します。
無題
Re:無題
>なお、_T(insert_test)を_T("insert into atm values('北条','3420','00000020','10'")にすると
>いけました。
と言っているなら普通
>strcpy(insert_test,"insert into atm values('北条','3420','00000020',\'");
>strcpy(char_int,"3420");
>strcat(insert_test,char_int);
>strcat(insert_test,"\');");
のSQL文がきちんとしたSQL構文になっているかを確認しませんか?
なのでinsert_test変数の中身のSQL文が間違っていないか確認してください。
また、SQLExecDirect関数が返却するエラーコード等でどういうエラーか
分からないのですか?
>いけました。
と言っているなら普通
>strcpy(insert_test,"insert into atm values('北条','3420','00000020',\'");
>strcpy(char_int,"3420");
>strcat(insert_test,char_int);
>strcat(insert_test,"\');");
のSQL文がきちんとしたSQL構文になっているかを確認しませんか?
なのでinsert_test変数の中身のSQL文が間違っていないか確認してください。
また、SQLExecDirect関数が返却するエラーコード等でどういうエラーか
分からないのですか?