Se utilizzo un array di strutture non tutti i valori delle righe sono ritornate nel buffer, es. righe da fetch 5, in buffer solo 3 con dati, così ritornate:
riga colonna 1 colonna 2
1° valore riga1 valore riga1
2° valore riga3 valore riga3
3° valore riga5 valore riga5
4°
5°
la riga 2 ha il valore della 3°, la 3° i valori della 5°, la 4° e la 5° vuote, mentre tutte le righe hanno valori
uso sybase come db e odbc 3, escludo che il problema sia con il db ma con la struttura dato che con array[][] in column-wise funziona tutto perfettamente
il codice nella parti salienti è il seguente:
SQLSMALLINT nrCr;
struct DataBinding {
SQLWCHAR data[10][100];
} *columnData;
SQLNumResultCols(stmt, &nrCr);
SQLSetStmtAttr(...)
SQLSetStmtAttr(...)
SQLSetStmtAttr(...)
//allocazione array di strutture per i dati della colonna
columnData = (struct DataBinding*)malloc(nrCr * sizeof(struct DataBinding));
//binding
for(int i=0; i<nrCr; i++) {
SQLBindCol(stmtR, i+1, SQL_C_WCHAR, &columnData[i].data, 100, SQL_NULL_HANDLE);
}
//ritorno dei dati
while((rc=SQLFetchScroll(stmtR,SQL_FETCH_NEXT,0))! = SQL_NO_DATA) {
for(unsigned int r=0; r<nrRowsFetched; r++) {
for(int c=0; c<nrCr; c++) {
MessageBox(0,columnData[c].data[r],L"test",MB_OK);
}
}
}