Datenbank - mySQL und MFC



  • Hallo,

    hab mir die Klassen von der HP von Unix-Tom besorgt.
    Nun kann ich mich super mit der Datenbank verbinden und Tabellen und so weiter anlegen.

    Nun hab ich keine Ahnung wie die Abfragen in eine Variable gespeichert werden.

    Oder kannn mir wenigstens jemand die Funktionen in der Klasse erklären?

    Danke

    Frostie



  • Kann mir niemand helfen??

    Anbei die Funktionen:

    MYSQL_ROW fetchbuffer;
    	MYSQL *conn;
    	MYSQL_RES *result;
     	bool connected;
    
     	char *errorMessage();		// Return current error message
    
     	int connect(CString maschine,CString database,UINT port,CString user,CString password);
     	void disconnect();		// Disconnect from database
     	int sqlexecute(CString sqlcommando);
     	UINT nrFields();
     	int fetch();
     	ULONG nrdaten();
     	void free();
     	char *fieldName(int n);
     	ULONG sqlexecuterows();
     	CString field[100];
    

    Gruß
    Frostie



  • HIer das absetzen einer Abfrage ohne Ergebnismenge

    CMYSQLDatabase insupddel;
    	if (insupddel.connected == false)
    	{
    		switch (insupddel.connect(host, datenbank, 3306, user, passw)) 
    		{
    		case DB_CONNECTION_BAD:
    			return 0;
    
    		case DB_CONNECTION_OK:
    			break;
    		}
    	}
    
    	switch(insupddel.sqlexecute(daten))
    	{
    	case DB_COMMAND_ERROR:
    		return 0;
    	case DB_COMMAND_OK:
    		break;
    	}
    

    Hier eine mit Ergebnismenge

    CMYSQLDatabase m_databaseconnect;
    
    	if (m_databaseconnect.connected == false)
    	{
    		switch (m_databaseconnect.connect(m_dbhost,m_dbdatenbank,3306,m_dbuser,m_dbpassw))
    		{
    			case DB_CONNECTION_BAD:
    
    				return false;
    			break;
    
    			case DB_CONNECTION_OK:
    			break;
    		}
    
    	}
    
    	CString commando = "SELECT id  FROM deinetabelle";
    	switch (m_databaseconnect.sqlexecute(commando))
    	{
    		case DB_COMMAND_ERROR:
    
    		return false;
    
    		case DB_COMMAND_OK:
    		return false;
    		case DB_EMPTY_QUERY:
    
    		return false;
    		case DB_SELECT_OK:
    		break;
    	}
    
    	// in databaseconnect.field[1] steht die id. für weitere field[2]  us.w.
    
    	for (UINT x = 1;x < m_databaseconnect.nrdaten();x++)
    	{
    		switch(m_databaseconnect.fetch())
    		{
    			case DB_FETCH_OK:
    			// in databaseconnect.field[1] steht die id.
    			break;
    
    			case DB_FETCH_EMPTY:
    
    			return true;
    		}
    	}
    return true;
    

    Im Grunde braucht man keine for-Schleife da man auch auf DB_FETCH_EMPTY testen kann. Ich habe es mal so aufgenommen.



  • Hallo UNIX-TOM,

    also es funktioniert eigentlich alles wunderbar, 😉
    nur hab ich jetzt einmal eine Frage.

    In der Variablen CString field[100] steht nur der erste Datensatz drin, ist das richtig?? 😕

    Wenn mein Ergebnis aber mehr Datensätze liefert? 😮
    Wie mach ich das? 😕

    Danke

    Frostie



  • Die Ergebnismenge steht in einer Struktur. Dh alle Zeilen wurden bereits vom Server empfangen. Um diese Ergebnismenge durchzugehen muss man fetchen.

    switch(m_databaseconnect.fetch())

    Deshalb gibt es ja die Schleife.

    Nach der Abfrage bekommst du sofort den ersten Datensatz.

    Für alle weiteren muss der fetch durchlaufen werden.
    Die erklärung dieser Klasse findet sich hoffentlich bald in meinem Buch. Da kommt dann auch noch ODBC, MySQL-COM u.s.w. dazu

    Ich denke aber das du jetzt was damit anfangen kannst



  • Hallo Unix-Tom,

    jetzt wird mir alles klar.

    Danke

    Ich freu mich schon auf Dein Buch.

    Kannst mir bitte ne Mail an mailto:frostie.org@gmx.de schreiben, wenn es erschienen ist, und wo ich es beziehen kann?

    Danke

    Frostie


Anmelden zum Antworten