22 TODBCRow::TODBCRow(SQLHSTMT stmt, Int_t fieldcount)
25 fFieldCount = fieldcount;
31 fBuffer =
new char*[fFieldCount];
32 fLengths =
new ULong_t[fFieldCount];
33 for (Int_t n = 0; n < fFieldCount; n++) {
52 void TODBCRow::Close(Option_t *)
55 for (Int_t n = 0; n < fFieldCount; n++)
73 void TODBCRow::CopyFieldValue(Int_t field)
75 #define buffer_len 128
77 fBuffer[field] =
new char[buffer_len];
81 SQLRETURN retcode = SQLGetData(fHstmt, field+1, SQL_C_CHAR, fBuffer[field], buffer_len, &ressize);
83 if (ressize==SQL_NULL_DATA) {
84 delete[] fBuffer[field];
89 fLengths[field] = ressize;
91 if (retcode==SQL_SUCCESS_WITH_INFO) {
94 SQLGetDiagRec(SQL_HANDLE_STMT, fHstmt, 1, state, &code, 0, 0, 0);
96 if (strcmp((
char*)state,
"01004")==0) {
99 char* newbuf =
new char[ressize+10];
100 strlcpy(newbuf, fBuffer[field], buffer_len);
101 delete fBuffer[field];
102 fBuffer[field] = newbuf;
103 newbuf+=(buffer_len-1);
104 retcode = SQLGetData(fHstmt, field+1, SQL_C_CHAR, newbuf, ressize+10-buffer_len, &ressize);
114 ULong_t TODBCRow::GetFieldLength(Int_t field)
116 if ((field<0) || (field>=fFieldCount))
return 0;
118 return fLengths[field];
124 const char *TODBCRow::GetField(Int_t field)
126 if ((field<0) || (field>=fFieldCount))
return 0;
128 return fBuffer[field];