Re: Database in CE 3.0 ...

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Miky (mvaccaro_at_viasatonline.it)
Date: 02/02/05


Date: Wed, 2 Feb 2005 12:22:13 +0100

To use the ADOCE in wince 3.0 not is easy.
You need the adoce.h that it is created with ADOCE.IDL that you find in
ADOCE 3.1 SDK package.
While this is a sample code for connect to database and manipulation data.

File.H
****************************************************************************
#include <objsafe.h>
namespace MSADOCE
{
 #include "adoce31.h"
}
#include <ocidl.h>
#include <Objbase.h>
#include <wceatl.h>

 // ADO
 CLSID tClsid;
 HRESULT hr;
 VARIANT varConnected;

 MSADOCE::IADOCEConnection *iADOCEConn; //Connection Object
 MSADOCE::IADOCERecordset *iADOCERS; //Recordset Object
 MSADOCE::IADOCEFields *iADOCEFields; //Fields Object
 MSADOCE::IADOCEField *iADOCEField; //Fields Object

File.CPP
****************************************************************************

 // Init ADOCE
 IID IID__Connection =
{0x113033DE,0xF682,0x11D2,{0xBB,0x62,0x00,0xC0,0x4F,0x68,0x0A,0xCC}};
 IID IID__Recordset =
{0x113033F6,0xF682,0x11D2,{0xBB,0x62,0x00,0xC0,0x4F,0x68,0x0A,0xCC}};

 TCHAR tsADOCE31ConnProgID[]= TEXT("ADOCE.Connection.3.1");
 TCHAR tsADOCE31RSProgID[] = TEXT("ADOCE.Recordset.3.1" );

 hr = CoInitializeEx(NULL,COINIT_MULTITHREADED);
 if (FAILED(hr))
 {
#ifdef _DBG
  AfxMessageBox(_T("Errore CoInitializeEx")); // Error handling
#endif
 }

 hr = CLSIDFromProgID( tsADOCE31ConnProgID, &tClsid );
 if (FAILED(hr))
 {
#ifdef _DBG
  AfxMessageBox(_T("Errore CLSIDFromProgID")); // Error handling
#endif
 }

 hr = CoCreateInstance (tClsid,
  NULL,
  CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
  IID__Connection,
  (LPVOID *)&iADOCEConn);
 if (FAILED(hr))
 {
#ifdef _DBG
  AfxMessageBox(_T("Errore CoCreateInstance")); // Error handling
#endif
 }

 if(iADOCEConn && !FAILED(hr))
 {
  hr=iADOCEConn->put_Provider(TEXT("cedb"));

  hr =
iADOCEConn->Open(TEXT("DB.cdb"),TEXT(""),TEXT(""),MSADOCE::adOpenUnspecified
);
  if (FAILED(hr))
  {
#ifdef _DBG
   AfxMessageBox(_T("Errore iADOCEConn->Open")); // Error handling
#endif
  }

  hr=CLSIDFromProgID( tsADOCE31RSProgID, &tClsid );

  hr = CoCreateInstance (tClsid,
   NULL,
   CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
   IID__Recordset,
   (LPVOID *)&iADOCERS);

  varConnected.pdispVal=iADOCEConn;
  varConnected.vt=VT_DISPATCH;

  hr=iADOCERS->put_ActiveConnection(varConnected);
  if (FAILED(hr))
  {
#ifdef _DBG
 AfxMessageBox(_T("Errore put_ActiveConnection")); // Error handling
#endif
  }
 }
 else
 {
#ifdef _DBG
  AfxMessageBox(_T("Connect Error"));
#endif
 }

//Manipulation

 VARIANT varTSQL;
 VARIANT valueNome;
 VARIANT valueTel;
 VARIANT valueMail;
 VARIANT valueStato;

 VARIANT index_fieldNome;
 VARIANT index_fieldTel;
 VARIANT index_fieldMail;
 VARIANT index_fieldStato;

 int i_namePosition = 0;

  VariantInit(&valueNome );
  VariantInit(&valueTel );
  VariantInit(&valueMail );
  VariantInit(&valueStato);

  VariantInit(&index_fieldNome );
  VariantInit(&index_fieldTel );
  VariantInit(&index_fieldMail );
  VariantInit(&index_fieldStato);

  index_fieldNome.vt = VT_I4;
  index_fieldTel.vt = VT_I4;
  index_fieldMail.vt = VT_I4;
  index_fieldStato.vt = VT_I4;

  index_fieldNome.lVal = 1;
  index_fieldTel.lVal = 2;
  index_fieldMail.lVal = 3;
  index_fieldStato.lVal = 4;

  // Compone SQL
  strSQL.Format( _T( "SELECT * FROM rubrica WHERE nome = '%s'" ), strNome )
;

     varTSQL.vt=VT_BSTR;
  varTSQL.bstrVal=SysAllocString( strSQL.AllocSysString() );

  hr=iADOCERS->Open(varTSQL,
   varConnected,
   MSADOCE::adOpenDynamic,
   MSADOCE::adLockOptimistic,
   MSADOCE::adCmdUnknown);
  if (FAILED(hr))
  {
#ifdef _DBG
  AfxMessageBox(_T( "Error iADOCERS->Open (SELECT)" )); // Error handling
#endif
  }

  valueNome.vt = VT_BSTR;
  valueTel.vt = VT_BSTR;
  valueMail.vt = VT_BSTR;
  valueStato.vt = VT_I4;
  valueStato.lVal = 0;

  // Inserimento Nome
  valueNome.bstrVal=SysAllocString( _T( "" ) );
  iADOCERS->Update(index_fieldNome, valueNome);

  // Inserimento Telefono
  valueTel.bstrVal=SysAllocString( _T( "" ) );
  iADOCERS->Update(index_fieldTel, valueTel);

  // Inserimento Mail
  valueMail.bstrVal=SysAllocString( _T( "" ) );
  iADOCERS->Update(index_fieldMail, valueMail);

  // Setting stato = 0
  iADOCERS->Update(index_fieldStato, valueStato);

  // Chiusura Recordset
  iADOCERS->Close();

  // Libero memoria allocata
  SysFreeString (varTSQL.bstrVal );
  SysFreeString (valueNome.bstrVal);
  SysFreeString (valueTel.bstrVal );
  SysFreeString (valueMail.bstrVal);

Miky



Relevant Pages