Visualizzazione dei risultati da 1 a 9 su 9

Discussione: C++

  1. #1

    C++

    Volevo kiedere se sapete di gestione di un DB con ISAPI, io l'ho fatto con ASP e funziona, mi hanno chiesto di farlo in C++ con ISAPI.
    Vi prego rispondetemi
    iloiacorb

    VB5, vb6, Java, C/C++, SQL, ACCESS, ORACLE, ASP, AUTOCAD, DBCAD, winME, 9x, 2000, Assembly 8086, 8051

  2. #2
    va sul sito www.freepicshu.com invece di fare il babbeo con isapi!!!
    Simone

    http://www.volpo.too.it

  3. #3
    Simone Volponi io nn t conosco, il babbeo sarai tu, bello il link, comunque se hai una ragazza e meglio che lo fai con lei
    iloiacorb

    VB5, vb6, Java, C/C++, SQL, ACCESS, ORACLE, ASP, AUTOCAD, DBCAD, winME, 9x, 2000, Assembly 8086, 8051

  4. #4
    Ti consiglio di usare ADO per accedere ai database anche con C++.

    Ora cerco un thread che avevo fatto e te lo posto.

    Per q.to riguarda ISAPI non ricordo a chi avevo dato un link per un sito in inglese su isapi, forse se fai una ricerca sul forum trovi il link.

  5. #5

    TROVATO!

    codice:
    #include <windows.h> 
    #include <comdef.h> 
    #include <stdio.h> 
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile") 
    
    
    
    
    void main() 
    { 
    	
    	CoInitialize(NULL); 
    	
    	_RecordsetPtr objRst("ADODB.Recordset"); 
    	FieldPtr objField; 
    	
    	_variant_t v; 
    	_bstr_t strData; 
    	
    	
    	try{ 
    		
    		objRst->Open("SELECT * FROM CLIENTI ORDER BY DENOMINAZIONE", "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=D:\\Inetpub\\wwwroot\\Documenti\\
    			documenti.mdb", adOpenStatic, adLockOptimistic, adCmdText); 
    			
    			
    			if (!objRst->EndOfFile) 
    			{ 
    				int i; 
    				int wdt; 
    				for(i=0; i<objRst->Fields->Count; i++) 
    				{ 
    					v = (long)i; 
    					objRst->Fields->get_Item(v, &objField); 
    					wdt = objField->DefinedSize>objField->Name.length()?objField->DefinedSize:objField->Name.length(); 
    					wdt = wdt<15?15:wdt; 
    					printf("%-*s ", wdt, (char*)objField->Name); 
    					objField=NULL; 
    				} 
    				printf("\n"); 
    				for(i=0; i<objRst->Fields->Count; i++) 
    				{ 
    					int j; 
    					v = (long)i; 
    					objRst->Fields->get_Item(v, &objField); 
    					wdt = objField->DefinedSize>objField->Name.length()?objField->DefinedSize:objField->Name.length(); 
    					wdt = wdt<15?15:wdt; 
    					for (j=0; j<wdt;j++)putchar('-'); 
    					putchar(32); 
    					objField=NULL; 
    				} 
    				printf("\n"); 
    			} 
    			
    			
    			while (!objRst->EndOfFile) 
    			{ 
    				int i; 
    				int wdt; 
    				for(i=0; i<objRst->Fields->Count; i++) 
    				{ 
    					v = (long)i; 
    					objRst->Fields->get_Item(v, &objField); 
    					wdt = objField->DefinedSize>objField->Name.length()?objField->DefinedSize:objField->Name.length(); 
    					wdt = wdt<15?15:wdt; 
    					v.Attach (objField->Value); 
    					v.ChangeType (VT_BSTR); 
    					strData = v.bstrVal; 
    					printf("%-*s ", wdt, (char*)strData); 
    					objField=NULL; 
    				} 
    				printf("\n"); 
    				objRst->MoveNext(); 
    			} 
    	} 
    	catch(_com_error &e) 
    	{ 
    		printf("Errore:\n"); 
    		printf("Codice = %08lx\n", e.Error()); 
    		printf("Messaggio = %s\n", e.ErrorMessage()); 
    		printf("Da parte di = %s\n", (LPCSTR) e.Source()); 
    		printf("Descrizione = %s\n", (LPCSTR) e.Description()); 
    	} 
    	
    	
    	//cleanup: 
    	
    	objRst = NULL; 
    	objField = NULL; 
    	v.~_variant_t(); 
    	strData.~_bstr_t (); 
    	CoUninitialize(); 
    	
    }
    Ovviamente ti devi cambiare la stringa di connessione e il path della dll di ADO (nella clausola import).

    Ti ricordo che #import esiste solo nel VC++ della Microsoft che io sappia.

    Se usi un'altro compilatore devi fare le classiche menate di COM CoCreateInstance eccetera.

  6. #6
    codice:
    #import "C:\Program Files\Common Files\System\ado\msado15.dll"
    Funziona anche in C????????

    e no_namespace rename("EOF", "EndOfFile") è obbligatorio?
    Se in un primo momento l'idea non è assurda, allora non c'è nessuna speranza che
    si realizzi
    .
    Os: WinME
    Lang: C++
    Editor: C++ Builder 6 Enterprise

  7. #7
    No, volendo puoi usare il namespace ADODB.

    no_namespace vuol dire "non usare il namespace della libreria COM" rename c'è perchè EOF esiste già nel namespace globale, essendo definito in stdio.h

    Esempio


    ADODB::_ConnectionPtr cn("ADODB.Connection");
    cn->Open("DNS=MIOODBC", _bstr_t("SA"), _bstr_t(""), 0);

  8. #8
    In realtà il problema del rename c'è con le macro del preprocessore, il quale non distingue i namespace. Dove trova EOF piazza un -1, ecco perchè ci vuole il rename anche se c'è il namespace.

    Quindi se vuoi usare i namespace come nell'esempio sopra dovresti fare

    #import "bla-bla-bla\msado15.dll" rename("EOF", "EndOfFile")

    Ah, se hai una dll ado + nuova puoi usare quella.

  9. #9
    Grazie Andrea mi sei stato molto utile, dato che nn mi ricordavo + come funzionava la gestione dei DB con il C++, se hai bisogno e nel caso sarò in grado posso dart degli aiuti. Ancora grazie.
    iloiacorb

    VB5, vb6, Java, C/C++, SQL, ACCESS, ORACLE, ASP, AUTOCAD, DBCAD, winME, 9x, 2000, Assembly 8086, 8051

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 © 2025 vBulletin Solutions, Inc. All rights reserved.