MySQL Problem



  • Hallo,

    ich habe ein kleines Problem mit MySQL!
    Und zwar wenn ich ein Datensatz auslese, ihn bearbeite und später wieder in die Tabelle
    schreiben will (der alte Datensatz soll überschrieben werden) bekommen ich immer die Fehlermeldung „EDBEngine-Error - Merkmal nicht verfügbar: Tranceaction are not enabled“.

    Im ODBC Treiber gibt es aber keine Einstellung für Tranceaction!!

    Hat einer vielleicht eine Idee??

    Gruß und Danke

    Michael



  • mit welchen Komponenten greifst du denn auf die MySQL-DB zu (BDE, ADO)?



  • BDE

    Table und Query



  • dann zeig mal den entsprechenden Code.



  • als erstes wird der zu bearbeitende Datatsatz mit Locate gesucht:

    Code:

    Table->Edit();
    if (ComboBox2->Text=="0") {
    betrag=Table->FieldByName("S0_lfdS_Betrag")->AsFloat;
    Table->FieldByName("S0_lfdS_Betrag")->AsFloat=betrag+StrToFloat(Edit31->Text);
    }
    else {
    betrag=Table->FieldByName(ComboBox2->Text+"_lfdS_Betrag")->AsFloat;
    Table->FieldByName(ComboBox2->Text+"_lfdS_Betrag")->AsFloat=betrag+StrToFloat (Edit31->Text);
    betrag=Table->FieldByName(ComboBox2->Text+"_lfdS_Steuern")->AsFloat;
    Table->FieldByName(ComboBox2->Text+"_lfdS_Steuern")->AsFloat=betrag+StrToFloat(Edit40->Text);
    }
    Table->Post();



  • setz mal diesen Teil in einen try-catch-Block:

    try
    {
      Table->Edit();
      ...
      Table->Post();
    }
    catch(...)
    {
      //Fehlerbehandlung
    }
    


  • Es kommt genau die gleiche Fehlermeldung!!! (wenn ich alles richtig gemacht habe?!?)



  • Auch wenn du die Anwendung nicht aus der IDE heraus startest?



  • Bei try/catch-Vorschlägen am besten immer auf den entsprechenden FAQ-Beitrag verweisen. 😉



  • Vieleicht mache ich auch etwas verkehrt?

    try
    {
    Table->ApplyUpdates();

    }
    catch (EDBEngineError& E)
    {
    MessageBox(0, E.Message.c_str(), "Problem!", MB_ICONSTOP |MB_OK);

    }

    Table->ApplyUpdates() (jetzt werden die Daten erst in eine Datei gespeichert und dann erst an die Datenbank übergeben )

    Kommt aber genau der gleiche, als wenn ich es direkt versuche!!



  • Zitat aus der FAQ:

    Dass die Exception-Warnung auch mit try beim Testlauf im Debugger auftritt ist normal (kann bei Bedarf in den Debugger-Optionen abgestellt werden).

    Wenn das Programm alleine für sich läuft, also über die .exe gestartet wird, dann sollte es nur die von dir vorgesehene Fehlermeldung auswerfen und anschliessend normal weiterlaufen.



  • Auch wenn ich das Projekt (und *.exe starte)erzeuge kommt die gleiche Fehlermeldung!

    Fehlermeldung:

    Problem!

    Merkmal nicht verfügbar!
    [MySQL] [ODBC 3.51 Driver] Transactions are not enabled!

    Kann dann Ok drücken und mit den Programm weiterarbeiten!

    Den Catch-Teil spricht er nicht an!



  • Habt Ihr mal darüber nachgedacht, daß mySQL eigentlich keine Transactionen unterstützt, ist das vielleicht die Ursache der Fehlermeldungen ??



  • Das ist garantiert die Ursache, es ging ja nur darum, die Fehlermeldung zu unterdrücken. Was scheinbar auch gelungen ist, zumindest was das Programm betrifft, die neue Fehlermeldung kommt ja direkt von den Treibern.



  • Ich würde schon ganz gern die neuen Daten in die Tabelle kriegen!!

    Wenn ich das Programm neu starte, haben alle überschreibenen Daten den alten Wert. Nur die Daten, die neu eingefügt wurden (mit insert) werden korrekt übernommen!

    Es muß doch auch die Möglichkeit geben, Daten einer MySQL-Datenbank abzuändern (ohne SQL Befehle Update)



  • Welchen BCB benutzt du denn? Im BCB6Pro/Ent gibt's dbExpress-Treiber für den direkten Zugriff auf MySQL.



  • Ich benutze Borland C++ Bulider 5 Pro mit ODBC-Treiber von MySQl. Um auf die Datenbank zuzugreifen TTable und TQuery +TDatabase verbunden mit ODBC-Treiber


  • Mod

    Hallo

    ich habe dasgleiche problem und die Transaktionen lassen sich doch im ODBC-Treiber abschalten

    ODBC-Datenquelle -> mySQL -> Options Disable Transactions

    Ich hoffe, das hat keine weiteren Auswirkungen ?

    MfG
    Klaus


Anmelden zum Antworten