Probleme mit dem Löschen des Inhalts eines DBGrids



  • Hallo,
    ich führe in einer Datenbank mit SQL unterschiedliche Abfragen durch und erhalte jeweils ein DataSet als Ergebnis aus der Abfrage.
    Das DataSet ist mit einem DBGrid verbunden. Die Daten aus der Abfrage werden im DBGrid korrekt angezeigt.

    Der SQL-Befehl kann auch per Hand in einem Memofeld editiert werden. Über einen Button wird die editierte Befehls-Abfrage dann gestartet.

    Dadurch passiert es zwangsläufig, dass die Daten, die sich gerade im DBGrid befinden nicht mit dem SQL-Befehl übereinstimmen, was natürlich zu Verwirrung führen kann.
    Um das zu vermeiden soll bei Änderungen am SQL-Befehl im Memofeld der Inhalt im DBGrid gelöscht werden. Um festzustellen, ob im Memofeld eine Änderung erfolgt, verwende ich das OnChange-Ereignis des Memofeldes. Das klappt.

    Jetzt das Problem:
    Zum Löschen der Einträge DBGrids verwende ich die folgende Sequenz

    TADOQuery* aDataSet = new TADOQuery(this); //wird an anderer Stelle erstellt/gelöscht
    
    void __fastcall MyForm::ButtonAbfrageClick(TObject *Sender) {  
      if (aDataSet->Active) //wenn DataSet geöffnet
        aDataSet->Close();  //dann schließen u damit den Inhalt des DBGrids löschen
    
      aDataSet->SQL->Text = Memofeld->Lines->Text; //neue Abfrage-SQL zuweisen und damit
      aDataSet->Open();     //Abfrage durchführen u DBGrid neu befüllen
    }
    

    Bei ein oder manchmal 2-maliger Ausführung klappt das, wie gewünscht. Das DBGrid wird geleert, bzw. befüllt. Wird das Ganze aber öfters hintereinander ausgeführt erhalte ich die folgende Exception

    Im Project MyDB.exe ist eine Exception der Klasse EAcessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 766E92CB in Modul 'MSDART.DLL'. Lesen von Adresse 00000020'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen

    Kann mir jemand sagen, was ich falsch mache?



  • Hallo,
    da mir hier keiner helfen will, habe ich mir erlaubt mir selbst zu helfen! 😃

    Für die, die mit MySQL + BCB6.0 zu tun haben und mit dem gleichen Problem kämpfen, wie oben geschildert, sei dieser Link ans Herz gelegt:
    http://bugs.mysql.com/bug.php?id=28065

    Habe den ODBC-Treiber von 3.51.14 auf 3.51.27 upgedatet. Und siehe da alles funktioniert jetzt wunderbar. 🙂


Anmelden zum Antworten