Zelig
02-11-2004, 15:59
Ciao Ragazzi
sto provando a connettemi ad un database Access 2000
con Visual C++ 6.0, ma la connessione va bene mentre la creazione del recordset mi va in errore.
mi sapete dire cosa sbagio :
import "c:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename( "EOF", "IsEOF" )
#include <ole2.h>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <adoint.h>
#include "conn.h"
//-----------------------------------------------------------------------------
int connessione()
{
char ls_fields[100];
long ll_count;
_bstr_t query;
_bstr_t conn_stringa;
::CoInitialize(NULL);
VARIANT vcOmitted = { VT_ERROR, 0, 0, 0, DISP_E_PARAMNOTFOUND };
ADODB::_ConnectionPtr conn = NULL;
ADODB::_RecordsetPtr recs = NULL;
//ADODB::_CommandPtr comm = NULL;
HRESULT hr = conn.CreateInstance(__uuidof(ADODB::Connection));
HRESULT hrs = recs.CreateInstance(__uuidof(ADODB::Recordset));
//HRESULT hc = comm.CreateInstance(__uuidof(ADODB::Command));
conn->Mode = ADODB::adModeReadWrite;
conn->CursorLocation = ADODB::CursorLocationEnum(adUseClient);
//creo la stringa di connessione
//conn_stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\Lavoro\\VisualC++\\Prove\\Adry\\Northwind.mdb;Jet OLEDB:Database Password=;";
conn_stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\Lavoro\\VisualC++\\Prove\\Adry\\Northwind.mdb;User Id=Admin;Password=;Mode=Read|Write|ReadWrite";
//mi connetto al database
hr = conn->Open(conn_stringa, "", "", -1);
if (FAILED(hr))
return 1;
//creo la query
query = "select Customer from Orders";
//eseguo la query
//QUI MI VA IN ERRORE
hr = recs->Open(_variant_t(query),_variant_t(conn), ADODB::adOpenDynamic, ADODB::adLockOptimistic, ADODB::adCmdText);
if (FAILED(hrs))
return 1;
//se il recordset è vuoto esco
if (recs == NULL)
return 1;
//altrimenti ciclo all'interno del recordset
try {
ll_count = 0;
while (!recs->IsEOF){
sprintf(ls_fields,"%s", (LPCTSTR)(_bstr_t) recs->Fields->Item["Customer"]->Value);
MessageBox(NULL,ls_fields,"Campo", MB_OK);
recs->MoveNext();
ll_count++;
}
}catch(...) {
conn->Close();
::CoUninitialize();
return 1;
}
// chiudo connessione e recordset
recs->Close();
conn->Close();
::CoUninitialize();
return 0;
}
//-----------------------------------------------------------------------------
Grazie
sto provando a connettemi ad un database Access 2000
con Visual C++ 6.0, ma la connessione va bene mentre la creazione del recordset mi va in errore.
mi sapete dire cosa sbagio :
import "c:\\Program Files\\Common Files\\System\\ado\\msado15.dll" rename( "EOF", "IsEOF" )
#include <ole2.h>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <adoint.h>
#include "conn.h"
//-----------------------------------------------------------------------------
int connessione()
{
char ls_fields[100];
long ll_count;
_bstr_t query;
_bstr_t conn_stringa;
::CoInitialize(NULL);
VARIANT vcOmitted = { VT_ERROR, 0, 0, 0, DISP_E_PARAMNOTFOUND };
ADODB::_ConnectionPtr conn = NULL;
ADODB::_RecordsetPtr recs = NULL;
//ADODB::_CommandPtr comm = NULL;
HRESULT hr = conn.CreateInstance(__uuidof(ADODB::Connection));
HRESULT hrs = recs.CreateInstance(__uuidof(ADODB::Recordset));
//HRESULT hc = comm.CreateInstance(__uuidof(ADODB::Command));
conn->Mode = ADODB::adModeReadWrite;
conn->CursorLocation = ADODB::CursorLocationEnum(adUseClient);
//creo la stringa di connessione
//conn_stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\Lavoro\\VisualC++\\Prove\\Adry\\Northwind.mdb;Jet OLEDB:Database Password=;";
conn_stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\Lavoro\\VisualC++\\Prove\\Adry\\Northwind.mdb;User Id=Admin;Password=;Mode=Read|Write|ReadWrite";
//mi connetto al database
hr = conn->Open(conn_stringa, "", "", -1);
if (FAILED(hr))
return 1;
//creo la query
query = "select Customer from Orders";
//eseguo la query
//QUI MI VA IN ERRORE
hr = recs->Open(_variant_t(query),_variant_t(conn), ADODB::adOpenDynamic, ADODB::adLockOptimistic, ADODB::adCmdText);
if (FAILED(hrs))
return 1;
//se il recordset è vuoto esco
if (recs == NULL)
return 1;
//altrimenti ciclo all'interno del recordset
try {
ll_count = 0;
while (!recs->IsEOF){
sprintf(ls_fields,"%s", (LPCTSTR)(_bstr_t) recs->Fields->Item["Customer"]->Value);
MessageBox(NULL,ls_fields,"Campo", MB_OK);
recs->MoveNext();
ll_count++;
}
}catch(...) {
conn->Close();
::CoUninitialize();
return 1;
}
// chiudo connessione e recordset
recs->Close();
conn->Close();
::CoUninitialize();
return 0;
}
//-----------------------------------------------------------------------------
Grazie