Newsgroup: it.comp.lang.c++
Titolo: Eseguire una connessione con query!

Qui di seguito ho scritto la parte del codice che gestisce la connessione
ODBC.
Ora il problema pricipale e' che una volta effettuata la connessione e la
query, entrambe con esito positivo, la richiesta di dati effettuata tramite
getdata, mi restituisca un -1 :((
Qualcuno ha mai fatto una cosa del genere....
#include <windows.h>
#include <sqlext.h>
#include <sql.h>
 void* env_handle ;
 void* con_handle ;
 void* sta_handle ;
 void* nome_user;
 void* nome_password;
 short* var_temp ;
 SQLINTEGER lUser, lPassword, n_utente,ln_utente;
 SQLRETURN response ;
 int login_timeout ;
int main(){
 login_timeout=5 ;
 /*
 EFFETTUA LA CONNESSIONE AD UNA RISORSA odbc
 */
 // Alloca l'enviroment handle
 response = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&env_handle) ;
 // Controlla se tutto e' andato OK
 if (response == SQL_SUCCESS || response == SQL_SUCCESS_WITH_INFO) {
  MessageBox(0,"Assegnazione dell'handle enviroment...
OK!!","SQLAllocHandle",0) ;
  // Imposta la versione del driver ODBC
  response =
SQLSetEnvAttr(env_handle,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0) ;
  // Controlla se tutto e' andato OK
  if (response == SQL_SUCCESS || response == SQL_SUCCESS_WITH_INFO) {
   MessageBox(0,"Versione ODBC impostata!! (ODBC3)","SQLSetEnvAttr",0) ;
   // Alloca l'handle di connessione
   response = SQLAllocHandle(SQL_HANDLE_DBC,env_handle, &con_handle) ;
   // Controlla se tutto e' andato OK
   if (response == SQL_SUCCESS || response == SQL_SUCCESS_WITH_INFO) {
    MessageBox(0,"Assegnazione dell'handle di connessione...
OK!!","SQLAllocHandle",0) ;
    // Impostazione timeout di login
    SQLSetConnectAttr(con_handle,SQL_LOGIN_TIMEOUT,(void*)login_timeout,0) ;
    // Effettua la connessione al database
    response = SQLConnect (con_handle,(SQLCHAR*)
"migrazionemail",14,(SQLCHAR*) "",0,(SQLCHAR*) "",0) ;
    // Controlla se tutto e' andato OK
    if (response == SQL_SUCCESS || response == SQL_SUCCESS_WITH_INFO) {
     MessageBox(0,"Connessione al database... OK!!","SQLConnect",0) ;
     // Alloca l'handle di statement
     response = SQLAllocHandle(SQL_HANDLE_STMT, con_handle, &sta_handle) ;
     // Controlla se tutto e' andato OK
     if (response == SQL_SUCCESS || response == SQL_SUCCESS_WITH_INFO) {
      MessageBox(0,"Assegnazione dell'handle si statement...
OK!!","SQLAllocHandle",0) ;
      // Esegue la richiesta SQL
      response = SQLExecDirect(sta_handle,(unsigned char*)"SELECT * FROM
Lista_Utenti",SQL_NTS) ;
      // Vede quante colonne vi sono nel resulset
      response = SQLNumResultCols(sta_handle,var_temp) ;
      // Leggo i parametri richiesti dal result set
      response = SQLGetData(sta_handle,1,SQL_C_ULONG,&n_utente,0,&ln_utente)
;
      //response =
SQLGetData(sta_handle,2,SQL_C_CHAR,nome_password,50,&lPassword) ;
      SQLFreeHandle(SQL_HANDLE_STMT,sta_handle) ;
     }
     SQLDisconnect(con_handle) ;
    }
    SQLFreeHandle(SQL_HANDLE_DBC, con_handle) ;
   }
  }
  SQLFreeHandle(SQL_HANDLE_ENV, env_handle) ;
 }
 return 0 ;
}
--
----------------------------------------------------------
Simone Severa
Uninet Technical Support
Via Cornelia, 498 00166 Roma, Italy
Office Phone +39 6 61114300
Fax. +39 6 61114202
E-Mail. 
sse...@uni.net
----------------------------------------------------------

Prima di chiamare SQLGetData() devi chiamare la SQLFetch() per leggere il
primo record.
Ciao.
Antonio Donatiello.

Mi intrometto nella questione per chidere un consiglio su un argomento
simile.
Unsando un CRecordset (ODBC Btrieve) č possibile leggere tutti i record di
un archivio in rete (continuamente modificato da altri PC) senza dover ogni
volta chiudere e riaprire il CRecordset ?
Grazie 2048 in anticipo !

...

Non ho mai usato CRecordset.
Dovrebbe bastare aprire il recordset in modalita' dynaset ed eventualmente
ritornare all'inizio. Se questo non funziona perche' l'ordinamento dei
record aggiunti dagli altri non rispecchia quello scelto da te nella query
puoi provare ad aprirlo in modalita' dynamic (l'help dice che non e'
supportato da tutti i driver ODBC).
Ciao.
Antonio Donatiello

Ok, ti faccio sapere;
many thanks (molti carri armati ;-)