RC = SQLGetData(hstmt, 1, SQL_C_CHAR, jumin.val, sizeof(jumin.val), &jumin.len); RC = SQLGetData(hstmt, 2, SQL_C_CHAR, name.val, sizeof(name.val), &name.len); RC = SQLGetData(hstmt, 3, SQL_C_CHAR, &sex.val, sizeof(sex.val), &sex.len); RC = SQLGetData(hstmt, 4, SQL_C_LONG, &age.val, sizeof(age.val), &age.len); 위와 같이 데이타를 추출을 하는데요... 3번째 필드체크에서 RC = 1 (SQL_SUCCESS_WITH_INFO) 가 떨어집니다. 위닝이라는데... 왜 그와같은 워닝이 발생되는지요? 잘못된 부분을 집어 주시면 너무 너무 감사하겠습니다....꾸벅
void HandleDiagnosticsPrint(SQLSMALLINT htype, /* handle type identifier */ SQLHANDLE hndl /* handle */ ) { SQLCHAR message[SQL_MAX_MESSAGE_LENGTH + 1]; SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1]; SQLINTEGER sqlcode; SQLSMALLINT length, i;
i = 1;
/* get multiple field settings of diagnostic record */ while (SQLGetDiagRec(htype, hndl, i, sqlstate, &sqlcode, message, SQL_MAX_MESSAGE_LENGTH + 1, &length) == SQL_SUCCESS) { printf("\n SQLSTATE = %s\n", sqlstate); printf(" Native Error Code = %d\n", sqlcode); printf("%s\n", message); i++; }
printf("-------------------------\n"); } /* HandleDiagnosticsPrint */
마라도님~ 글을 올리기 전에 이리저리 테스트를 해봤었습니다. 올려주신 것도 확인을 해봤었습니다. 그래서 워닝이라는 말도 적은것이었구요. 워닝이 발생하는 부분을 2바이트로 잡고, Get함수 호출시 버퍼사이즈도 2바이트로 하면 워닝없이 제대로 값이 나오더군요. struct { SQLCHAR val[2]; SQLINTEGER len; } sex; /* 'Y' or 'X' */ RC = SQLGetData(hstmt, 3, SQL_C_CHAR, sex.val, sizeof(sex.val), &sex.len); 또는 struct { SQLCHAR val; SQLINTEGER len; } sex; /* 'Y' or 'X' */ RC = SQLGetData(hstmt, 3, SQL_C_CHAR, &sex.val, 2, &sex.len); 와 같이 해도 워닝없이 값이 제대로 나오더군요. 이런저런 테스트를 해보고..위의 첫번째 방법같이 코딩을 해서 잠시 워닝은 빼 놨습니다만... 워닝 발생시 잘못된 부분을 알고 싶어서... 질문을 올린거랍니다. Db2를 처음 접근을 해보고....또 영어가 짧아서 ~ 마라도님 글에 답이 있음을 찾아내지 못한것인지....모르겠네요... 참고로 상태와 에러코드는 아래와 같고...메세지는 Data truncated 입니다요.. SQLSTATE = 01004 Native Error Code = -99999