Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    8

    [VC++] Utilizzo di Ado in WIN32

    Salve a tutti, ho un problema nell'utilizzare ADO e la programmazione WIN32 (NO MFC).
    Ho creato una dialog box nella quale ho inserito 4 EDITBOX per visualizzare i record di un file Access e 2 BUTTON per andare avanti e indietro tra i record. Il problema è che per qualche ragione che non conosco per far funzionare il programma ad ogni CASE devo aprire la connessione al file Access e per questo negli EDITBOX viene visualizzato sempre la prima riga della tabella Access.
    Son partito prendendo spunto dagli esempi fatti da Jonny_Deep (ottimi!).
    Questo è il codice

    codice:
    #include "resource.h"
    
    #import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
    
    
    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
    	CoInitialize(NULL);
    	_RecordsetPtr pRec("ADODB.Recordset");
    	_ConnectionPtr pConn("ADODB.Connection");
    	_bstr_t strConn("DRIVER={Microsoft Access Driver (*.mdb)};UID=;PWD=;DBQ=Archivio.mdb");
    	
    	switch(message)
    	{
    
    		case WM_INITDIALOG:
    		{
    
    
    			try
    			{
    				pConn->Open(strConn,"","",adConnectUnspecified);
    				pRec->Open("SELECT * FROM account", strConn, adOpenUnspecified, adLockOptimistic,adCmdText );
    
    
    				pRec->MoveFirst();
    
    				SetDlgItemText(hDlg,IDC_COD,(_bstr_t) pRec->GetFields()->GetItem("codice")->GetValue());
    				SetDlgItemText(hDlg,IDC_USER,(_bstr_t) pRec->GetFields()->GetItem("username")->GetValue());
    				SetDlgItemText(hDlg,IDC_PASS,(_bstr_t) pRec->GetFields()->GetItem("password")->GetValue());
    				SetDlgItemText(hDlg,IDC_UTENTE,(_bstr_t) pRec->GetFields()->GetItem("utente")->GetValue());
    
    
    
    				pRec->Close();
    				pConn->Close();
    
    			}
    			catch(_com_error &exception)
    			{
    				if(&exception != NULL)
    				{
    					MessageBox(NULL,exception.Description(),exception.ErrorMessage(),MB_OK);
    					exit(1);
    				}
    			}
    
    
    		}
    		return TRUE;
    
    		case WM_COMMAND:
    
    			switch(LOWORD(wParam))
    			{
    
    				case IDC_NEXT:
    				{
    					try
    					{
    						pConn->Open(strConn,"","",adConnectUnspecified);
    						pRec->Open("SELECT * FROM account", strConn, adOpenUnspecified, adLockOptimistic,adCmdText );
    
    						pRec->MoveNext();
    
    						SetDlgItemText(hDlg,IDC_COD,(_bstr_t) pRec->GetFields()->GetItem("codice")->GetValue());
    						SetDlgItemText(hDlg,IDC_USER,(_bstr_t) pRec->GetFields()->GetItem("username")->GetValue());
    						SetDlgItemText(hDlg,IDC_PASS,(_bstr_t) pRec->GetFields()->GetItem("password")->GetValue());
    						SetDlgItemText(hDlg,IDC_UTENTE,(_bstr_t) pRec->GetFields()->GetItem("utente")->GetValue());
    						
    
    
    					}
    					catch(_com_error &exception)
    					{
    						if(&exception != NULL)
    						{
    							MessageBox(NULL,exception.Description(),exception.ErrorMessage(),MB_OK);
    							exit(1);
    						}
    					}
    
    				}
    				break;
    
    
    				case IDC_PREVIEW:
    				{
    					try
    					{
    						
    						pConn->Open(strConn,"","",adConnectUnspecified);
    						pRec->Open("SELECT * FROM account", strConn, adOpenUnspecified, adLockOptimistic,adCmdText );
    
    						pRec->MovePrevious();
    
    						SetDlgItemText(hDlg,IDC_COD,(_bstr_t) pRec->GetFields()->GetItem("codice")->GetValue());
    						SetDlgItemText(hDlg,IDC_USER,(_bstr_t) pRec->GetFields()->GetItem("username")->GetValue());
    						SetDlgItemText(hDlg,IDC_PASS,(_bstr_t) pRec->GetFields()->GetItem("password")->GetValue());
    						SetDlgItemText(hDlg,IDC_UTENTE,(_bstr_t) pRec->GetFields()->GetItem("utente")->GetValue());
    
    						pRec->Close();
    						pConn->Close();
    
    					}
    					catch(_com_error &exception)
    					{
    						if(&exception != NULL)
    						{
    							MessageBox(NULL,exception.Description(),exception.ErrorMessage(),MB_OK);
    							exit(1);
    						}
    					}
    
    
    				}
    				break;
    
    
    				case WM_DESTROY:
    				{
    
    
    					CoUninitialize();
    					EndDialog(hDlg,0);
    
    				}
    				return TRUE;	
    			}
    
    	}
    	return FALSE;
    }
    
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR LpCmdLine, int nCmdLine)
    {
    
    	
    	return DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG),NULL,DlgProc);
    
    
    }
    Ho già cercato in tutto il forum e internet e non ho trovato niente che mi possa aiutare.
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    8
    son riuscito a trovare la soluzione al mio problema.
    Se a qualcuno interessa questo è il codice:

    codice:
    #include <windows.h>
    #include <string>
    #include "resource.h"
    using namespace std;
    
    #import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
    
    #define CREATEiNSTANCE(sp,riid) { HRESULT _hr =sp .CreateInstance( __uuidof( riid ) ); if (FAILED(_hr)) _com_issue_error(_hr); }
    
    _RecordsetPtr pRec = NULL;
    
    _ConnectionPtr pConn = NULL;
    
    
    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
    	CoInitialize(NULL);
    
    	switch(message)
    	{
    
    		case WM_INITDIALOG:
    		{
    	
    			try
    			{
    
    				CREATEiNSTANCE(pConn,Connection);
    
    				pConn->ConnectionString = L"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=Archivio.mdb; DefaultDir=C:\\";
    				pConn->Open( "", "", "", adCmdUnspecified );
    
    				CREATEiNSTANCE(pRec,Recordset);
    
    				pRec->PutRefActiveConnection( pConn );
    				pRec->Open("SELECT * FROM tabella;", vtMissing, adOpenDynamic,adLockBatchOptimistic, -1);
    
    
    
    			}        
    			catch(_com_error &e)
    			{
    
    				_bstr_t bstrSource(e.Source());
    				_bstr_t bs =  _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ") 
    				+ _bstr_t(e.ErrorMessage()) + _bstr_t("\nDescription:\n") 
    				+ _bstr_t(e.Description());        
    				MessageBox(hDlg,bs,bstrSource, MB_OK);
    				return 0;
    
    			}
    
    
    			SetDlgItemText(hDlg,IDC_COD,(_bstr_t) pRec->GetFields()->GetItem("colonna1")->GetValue());
    			SetDlgItemText(hDlg,IDC_USER,(_bstr_t) pRec->GetFields()->GetItem("colonna2")->GetValue());
    			SetDlgItemText(hDlg,IDC_PASS,(_bstr_t) pRec->GetFields()->GetItem("colonna3")->GetValue());
    			SetDlgItemText(hDlg,IDC_UTENTE,(_bstr_t) pRec->GetFields()->GetItem("colonna4")->GetValue());
    
    
    		}
    		return TRUE;
    
    
    				
    		case WM_COMMAND:
    		{
    		
    			switch(LOWORD(wParam))
    			{
    
    				case IDC_PREVIEW:
    				{
    					try
    					{
    
    						pRec->MovePrevious();
    						
    
    						SetDlgItemText(hDlg,IDC_COD,(_bstr_t) pRec->GetFields()->GetItem("colonna1")->GetValue());
    						SetDlgItemText(hDlg,IDC_USER,(_bstr_t) pRec->GetFields()->GetItem("colonna2")->GetValue());
    						SetDlgItemText(hDlg,IDC_PASS,(_bstr_t) pRec->GetFields()->GetItem("colonna3")->GetValue());
    						SetDlgItemText(hDlg,IDC_UTENTE,(_bstr_t) pRec->GetFields()->GetItem("colonna4")->GetValue());
    					
    					}		
    					catch(_com_error &e)
    					{
    
    						_bstr_t bstrSource(e.Source());
    						_bstr_t bs =  _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ") 
    						+ _bstr_t(e.ErrorMessage()) + _bstr_t("\nDescription:\n") 
    						+ _bstr_t(e.Description());        
    						MessageBox(hDlg,bs,bstrSource, MB_OK);
    						return 0;
    
    					}
    
    				}
    				break;
    
    
    				case IDC_NEXT:
    				{
    
    					try
    					{
    
    						pRec->MoveNext();
    								
    						SetDlgItemText(hDlg,IDC_COD,(_bstr_t) pRec->GetFields()->GetItem("colonna1")->GetValue());
    						SetDlgItemText(hDlg,IDC_USER,(_bstr_t) pRec->GetFields()->GetItem("colonna2")->GetValue());
    						SetDlgItemText(hDlg,IDC_PASS,(_bstr_t) pRec->GetFields()->GetItem("colonna3")->GetValue());
    						SetDlgItemText(hDlg,IDC_UTENTE,(_bstr_t) pRec->GetFields()->GetItem("colonna4")->GetValue());
    
    					}		
    					catch(_com_error &e)
    					{
    
    						_bstr_t bstrSource(e.Source());
    						_bstr_t bs =  _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ") 
    						+ _bstr_t(e.ErrorMessage()) + _bstr_t("\nDescription:\n") 
    						+ _bstr_t(e.Description());        
    						MessageBox(hDlg,bs,bstrSource, MB_OK);
    						return 0;
    
    					}
    
    				}
    				break;
    
    
    				case WM_DESTROY:
    				{
    
    					try
    					{
    						pRec->Close();
    						pConn->Close();
    
    						CoUninitialize();
    
    						SetDlgItemText(hDlg,IDC_COD,NULL);
    						SetDlgItemText(hDlg,IDC_USER,NULL);
    						SetDlgItemText(hDlg,IDC_PASS,NULL);
    						SetDlgItemText(hDlg,IDC_UTENTE,NULL);
    
    					}        
    					catch(_com_error &e)
    					{
    						_bstr_t bstrSource(e.Source());
    						_bstr_t bs =  _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ") 
    						+ _bstr_t(e.ErrorMessage()) + _bstr_t("\nDescription:\n") 
    						+ _bstr_t(e.Description());        
    						MessageBox(hDlg,bs,bstrSource, MB_OK);
    						exit(1);
    
    					}
    
    					EndDialog(hDlg,0);
    
    				}return TRUE;
    					
    			}
    		}
    
    	}
    	return FALSE;
    }
    
    
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR LpCmdLine, int nCmdLine)
    {
    	
    	return DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG),NULL,DlgProc);
    
    }
    Ho un'altra damanda:
    Dopo aver aperto aperto la connessione e il recordset, se uso RecordCount o GetRecordCount() mi ritornano sempre -1. Cha devo fare?

    codice:
    CREATEiNSTANCE(pConn,Connection);
    
    pConn->ConnectionString = L"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=Archivio.mdb; DefaultDir=C:\\";
    pConn->Open( "", "", "", adCmdUnspecified );
    
    CREATEiNSTANCE(pRec,Recordset);
    
    pRec->PutRefActiveConnection( pConn );
    pRec->Open("SELECT * FROM tabella;", vtMissing, adOpenDynamic,adLockBatchOptimistic, -1);
    
    long nRecord = pRec->GetRecordCount();

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.