PDA

View Full Version : [Visual C++] & Access


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

Zelig
03-11-2004, 08:40
ho provato con un database creato con access 97 e funziona.
Mi confermate che non è possibile connettersi ad Access 2000 con visual C++ utilizzando il metodo usato nel post precedente.

ciao

maxithron
03-11-2004, 11:21
Hai bisogno del driver Jet 4.0 anzichè del 3.51. Dovresti scaricarti L'ultimo Service Pack per VC6++.

Zelig
03-11-2004, 19:06
ok grazie
sembra funzionare, anche se ho ancora un paio di problemini,

mi da errore se nella query invece dell'asterisco metto il nome dei campi e un altro errore qui

sprintf(ls_fields,"%s", (LPCTSTR)(_bstr_t) recs->Fields->Item["Customer"]->Value);

ciao davide