Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++/MySql - Resultset an andere Funktionen übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.12.2007, 01:07 Uhr
docjo



Hallo,

ich sitze nun schon seit Stunden an einem Übergabeproblem eines
Resultsets der MySql-C API.

Ich bekomme von einer SELECT Anweisung ein Resultset vom Typ MYSQL_RES
geliefert, möchte damit aber in einer Funktion einer anderen Klasse arbeiten.

Nun wird mit
C++:
MYSQL_RES *res
eine Resultset in einer Klasse initialisiert.

Dieses Resultset wird dann in einer Funktion mit folgenden Funktionskopf gefüllt:


C++:
void DataImport::dbQuery(char* query, MYSQL_RES &result)


der übergebenen Referenz result wird dann der Inhalt von des Resultsets geschrieben,
also mit


C++:
result = *res;


In einer Funktion in einer anderen Klassen rufe ich also die Funktion
C++:
dbQuery
auf und bekomme das Resultset zurückgeliefert.
Also:


C++:
MYSQL_RES *res;
dataImport.dbQuery("Select * from ...",res);



Nun verwende ich dort das Resultset immer mit


C++:
MYSQL_ROW test = mysql_fetch_row(&res);


bekomme aber spätestens dann eine Speicherzugriffsverletzung.

Nun ist meine Frage, an was liegt es?
Wenn ich das Resultset in der selben Klasse mit obigen Befehl verwende,
funktioniert es ohne Probleme?

Übergebe ich mein Ergebnis falsch?

Bin für jeden Vorschlag dankbar...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.12.2007, 09:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Hab ich noch nicht verstanden. Willst du nun einen Zeiger oder eine Referenz auf einen Zeiger übergeben....

ich mache das in etwa immer in der Art


C++:
#ifndef DB_INTERFACE_H
#define DB_INTERFACE_H

//#include "afxwin.h"
//#include "winsock2.h"
#include "mysql.h"

#include <vector>
#include <string>

class DBInterface{

    public:

        DBInterface(std::string host, std::string user, std::string passwd, std::string db);
        ~DBInterface();
        
        int selectquery(std::string cmd, std::vector<std::vector<std::string> > & queryresult);

    private:
        
    
        bool error;
        char*** queryresult;

    public:    MYSQL *connection;


};


#endif




C++:
#include "DBInterface.h"
DBInterface::DBInterface(std::string host, std::string user, std::string passwd, std::string db){

    error=false;

    // initialerror
    if(!(connection=mysql_init(NULL))) error=true;    
      
    //connecterror
    if(!(connection=mysql_real_connect(connection, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), 0, NULL, 0))) error=true;

}

DBInterface::~DBInterface(){mysql_close(connection);}


int DBInterface::selectquery(std::string cmd, std::vector<std::vector<std::string> > & queryresult){

    size_t i,j;
    size_t num_rows, num_fields;

    MYSQL_RES *result;
    MYSQL_ROW row;

    mysql_query(connection,cmd.c_str());
    result=mysql_store_result(connection);
    num_fields=mysql_num_fields(result);
    num_rows=mysql_num_rows(result);

    queryresult.resize(num_rows);
    for(j=0;j<num_rows;j++){
        queryresult[j].resize(num_fields);
    }
    
    for(j=0;j<num_rows;j++){
        row=mysql_fetch_row(result);
        for(i=0;i<num_fields;i++){
            queryresult[j][i]=row[i];
        }
    }
        
    
    mysql_free_result(result);


    return num_rows;

}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.12.2007 um 09:47 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: