PDA

View Full Version : Visual c++ recordset


Zelig
19-07-2004, 18:17
ciao volevo chiedervi un aiuto con i recordset di visual c++

proticamente io faccio una select che mi ritorna 4 campi, se tutti i campi sono valorizzati non ce problema, ma se uno dei 4 e vuoto mi va in errore.
Sappete perchè e cosa devo fare per rimediare

qui un pò del mio codice:

//eseguo la query
ptrRS = m_Connection->Execute(bls_query,NULL,ADODB::adCmdText);

while (!ptrRS->IsEOF){

sprintf(ls_datetime ,"%s", (LPCTSTR)(_bstr_t) ptrRS->Fields->GetItem("datetime")->Value);
sprintf(ls_user_msg ,"%s", (LPCTSTR)(_bstr_t) ptrRS->Fields->GetItem("usr_msg")->Value);
sprintf(ls_cur_status ,"%s", (LPCTSTR)(_bstr_t) ptrRS->Fields->GetItem("cur_sts")->Value);
sprintf(ls_reason ,"%s", (LPCTSTR)(_bstr_t) ptrRS->Fields->GetItem("reason_msg")->Value);

ptrRS->MoveNext();
ll_count_rows++;
}
ptrRS->Close();

se uno dei campi è vuoto mi da errore ma non mi sembra normale

ciao

ri
19-07-2004, 18:34
è normale perchè ti ritorna un NULL, o meglio, un VT_NULL

dovresti sempre fare una cosa tipo


variant_t val = ptrRS->Fields->GetItem("datetime")->Value
if(!VT_NULL(&val))
// ok, posso stampare il valore

Zelig
19-07-2004, 19:21
grazie tante per la risposta
ma ho un problemino col tuo if(!VT_NULL(&val))

mi da questo errore:

error C2064: term does not evaluate to a function

grazie

Zelig
19-07-2004, 19:42
ok, ho risolto con

if (val.vt != 1)
//stampo il valore


grazie ancora

ciao zelig

ri
19-07-2004, 22:09
ah si giusto, per l'altro ci vuole un include che non ricordo (mi pare... mmm)
boh cmq io ho risolto con una classe Field templatizzata che mi fa tutto il lavoro sporco :)