tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1429
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    themonk themonk ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    243
    Hallo,
    nachdem ich es geschafft habe mein Projekt soweit fertig zu stellen.
    Musste ich beim testen feststellen das das Programm mit folgender Fehlermeldung abstürzt:
    System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
    bei mysql_num_fields(st_mysql_res* )
    Dazu habe ich hier im Forum und bei google auch etwas gefunden aber keine Lösung für mein Problem. Also habe ich nachgeschaut wo das Problem in meinem Code ist.
    Dabei ist mir aufgefallen das wenn ich folgende Zeile auskommentiere das Programm ohne Fehler läuft
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
         MYSQL *connection, mysql;
    MYSQL_RES *result;
        MYSQL_ROW row;
    unsigned int num_fields;
        unsigned int i;
    ....
    [B]num_fields = mysql_num_fields(result);[/B]
     
       while ((row = mysql_fetch_row(result))) 
                { 
    ...
    Der Fehler kommt etwa dann wenn diese Funktion ca.200mal aufgerufen wurde
     

  2. #2
    lowlevel Tutorials.de Gastzugang
    Hallo,

    bitte poste das ... vor dem Aufruf komplett. Du rufst die Funktion ja richtig auf. SystemAccessViolation in so einem Zusammenhang bedeutet, dass der Pointer, den du der Funktion übergibst ("result") an eine falsche Stelle zeigt. Deswegen brauchen wir den Code davor um festzustellen wo der Fehler liegt und was alles mit result zwischendrin gemacht wird.

    Gruß
    stephsto
     

  3. #3
    themonk themonk ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    243
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
    ..include und co...
     
    MYSQL *connection, mysql;
    MYSQL_RES *result;
        MYSQL_ROW row;
    unsigned int num_fields;
        unsigned int i;
    char * test;
     
    test="";
         /* connect to the mySQL database at test.domain.de */
        mysql_init(&mysql); 
       /* Mit dem Server verbinden */
       connection =mysql_real_connect (
            &mysql,   /* Zeiger auf MYSQL-Handler*/
            "localhost", /* Host-Name*/
            "user", /* User-Name*/
            "pw", /* Passwort für user_name */
            NULL,  /* Name der Datenbank*/
            0,     /* Port (default=0) */
            NULL,  /* Socket (default=NULL)*/
            0      /* keine Flags */  ) ;
            
            
            if(connection== NULL) {
          fprintf (stderr, "Fehler mysql_real_connect():"
            "%u (%s)\n",mysql_errno (&mysql), mysql_error (&mysql));
     
          
       }
       else{
          printf("Erfolgreich mit dem MySQL-Server verbunden\n");
        
     
     
       }
    std::string strQuery =  "SELECT * FROM `test`.`test` WHERE art='1' ";//Datenbank abfrage
    mysql_query( &mysql, strQuery.c_str());
     result = mysql_store_result(&mysql);
     
     
     num_fields = mysql_num_fields(result);
     
       while ((row = mysql_fetch_row(result))) 
                { 
     
                   test= row[1]; //Inhalt des Feldes
                
                  }
     
     
     
     
    return test;  //Schreibt auf dem Button
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von themonk Beitrag anzeigen
    Code :
    1
    2
    
     mysql_query( &mysql, strQuery.c_str());
     result = mysql_store_result(&mysql);
    Also logischerweise muss man erstmal prüfen, ob
    1. die Anfrage überhaupt erfolgreich war
    2. überhaupt ein Resultat zurückgeliefert wurde

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    themonk themonk ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    243
    Ich habe zwar nicht herausgefunden wie man sich einen Mysql Error anzeigen lassen kann aber ich gehe mal davon aus das ich Zuviel Connections zur Datenbank mache da ich die Funktion ja ein paar Hundert Mal aufrufe. Habe die Klammer hinter „ printf("Erfolgreich mit dem MySQL-Server verbunden\n"); }
    „ einfach mal ans Ende gesetzt und dann kommt zwar kein Fehler mehr aber es wird auch nichts mehr aus der Datenbank ausgelesen.
    Muss jetzt nur eine Passende stelle finden wo ich die Datenbank Verbindung herstellen kann.
    Reicht es wenn ich
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
        MYSQL *connection, mysql;
    MYSQL_RES *result;
        MYSQL_ROW row;
     
     
     
         /* connect to the mySQL database at test.domain.de */
        mysql_init(&mysql); 
       /* Mit dem Server verbinden */
       connection =mysql_real_connect (
            &mysql,   /* Zeiger auf MYSQL-Handler*/
            "localhost", /* Host-Name*/
            "user", /* User-Name*/
            "pw", /* Passwort für user_name */
            NULL,  /* Name der Datenbank*/
            0,     /* Port (default=0) */
            NULL,  /* Socket (default=NULL)*/
            0      /* keine Flags */  ) ;
    einfach vorher mal include?
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von themonk Beitrag anzeigen
    Ich habe zwar nicht herausgefunden wie man sich einen Mysql Error anzeigen lassen kann
    Das steht aber in deinem Code ?
    Zitat Zitat von themonk Beitrag anzeigen
    Muss jetzt nur eine Passende stelle finden wo ich die Datenbank Verbindung herstellen kann.
    Warum machst du das nicht bevor du die Funktion aufrufst und übergibst dann das MYSQL Objekt als Parameter an die Funktion?

    Dann solltest du natürlich auch das Resultat (wenn es eins gab) und die Verbindung wieder freigeben. Das machst du anscheinend auch nirgendwo. Lies doch mal die Dokumentation der Funktionen, da steht dann was du aufrufen mußt um die Resourcen freizugeben.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    themonk themonk ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    243
    Zitat Zitat von deepthroat Beitrag anzeigen
    Das steht aber in deinem Code ?
    Oh stimmt. Kommt auf jedenfall als Fehler:Too many connections

    Nur wie mache ich das jetzt das alle Funktion auf ein Datenbank Verbindung zugreifen können, schon klar das ich das vor allen Funktionien machen muss nur wie. Am besten wäre doch eine Funktion in der die Verbindung hergestellt wird und dann im result das &mysql hat.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     MYSQL *connection, mysql;
     /* connect to the mySQL database at test.domain.de */
        mysql_init(&mysql); 
       /* Mit dem Server verbinden */
       connection =mysql_real_connect (
            &mysql,   /* Zeiger auf MYSQL-Handler*/
            "localhost", /* Host-Name*/
            "user", /* User-Name*/
            "pw", /* Passwort für user_name */
            NULL,  /* Name der Datenbank*/
            0,     /* Port (default=0) */
            NULL,  /* Socket (default=NULL)*/
            0      /* keine Flags */  ) ;
     
    result &mysql;
    geht aber nicht
     

Ähnliche Themen

  1. Programm stürzt ab
    Von Blaze241 im Forum Java
    Antworten: 4
    Letzter Beitrag: 02.07.09, 15:14
  2. System.AccessViolationException
    Von buell im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 02.07.08, 13:41
  3. Antworten: 4
    Letzter Beitrag: 06.12.06, 13:08
  4. Programm stürzt ab
    Von Razorhawk im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 30.09.05, 08:24
  5. Programm stürzt immer ab!
    Von Engfer im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 20.08.04, 20:06