Merkwürdiges Verhalten MySQL

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
hellobello
Beiträge: 5
Registriert: Di 30. Sep 2014, 19:44

Merkwürdiges Verhalten MySQL

Beitrag von hellobello »

Guten Morgen Gemeinde,
ich bin neu mit Lazarus, und spiele gerade ein wenig mit DB (mySQL via XAMPP) herum. Was in VB recht einfach war, wirft bei Lazarus ein paar Fragen auf. Und zwar:
Verbinden mit der DB kein Problem, Daten auslesen auch nicht. Aber wenn ich mit

Code: Alles auswählen

procedure TForm1.ModelNeuClick(Sender: TObject);
var
  input: String;
 
begin
     input := inputbox('Neues Modell','Namen eingeben','VW T4');
     sqlquery.Close;                                     // Letzte Verbindung schließen
     sqlquery.sql.clear;                                 // Letzter Befehl löschen
     sqlquery.SQL.add('select * from models');      // Neue Tabelle öffnen
     sqlquery.Open;
 
     sqlquery.SQL.text := 'insert into models (model,checked) values ('''+input+''', 0)';
     sqlquery.ExecSQL ;
 
end;             


Einen neuen Datensatz in die Tabelle schreibe, kann ich ihn mit:

Code: Alles auswählen

procedure TForm1.ListboxFuellen();
begin
  checklistbox1.clear;
  sqlquery.Close;                                     // Letzte Verbindung schließen
  sqlquery.sql.clear;                                 // Letzter Befehl löschen
  sqlquery.SQL.add ('SELECT * FROM models ORDER BY model');
                                                      // Neue Anfrage
  sqlquery.Open;                                      // Anfrage schicken
  // Alle SQL Befehle so schicken
  while not sqlquery.EOF do
  begin
    checklistbox1.Items.Add(sqlquery.fieldbyname('model').AsString);
                                                      // .AsString nicht vergessen
    sqlquery.Next;                                    // Nächster Eintrag NICHT VERGESSEN :-)
  end;
  sqlquery.close;
end;           


Auch wieder auslesen. Soweit sogut. Aber wenn ich die App schließe, dann sind auch die neu hinzugefügten Daten wieder weg.

Komischerweise sehe ich in phpMyAdmin während der Laufzeit des Programms unter "Datensätze" auch die Anzahl der in der Tabelle befindlichen Datensätze richtig (~7 z.B.). Klicke ich jedoch auf "Anzeigen" wird mir nichts angezeigt. Dennoch kann ich die Daten auslesen, und auch verändern. Wenn ich das Programm schließe werden mir wieder ~0 Datensätze angezeigt, und alles ist weg.

Zunächst dachte ich, ich muß das Beenden des Programms abfangen, und die DB sauber per Programm schließen, aber das hat auch nichts gebracht. Irgendwie scheint es mir als würde sowas wie eine "Schattentabelle" existieren, die zwar Daten enthält, aber nur solange das erstellende Programm läuft. Ist das Programm beendet, ist auch die Schattentabelle weg :evil: Was habe ich übersehen? Ich doktere jetzt schon seit Stunden rum, i-net suche hat auch nix gebracht. Liegts an meinem Proggy, oder an irgendeiner Einstellung bei MySQL die ich falsch gesetzt habe?

Danke für eure Geduld,
der hello

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Merkwürdiges Verhalten MySQL

Beitrag von theo »

Bin kein Spezialist, aber Google mal nach "lazarus transaction commit"

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Merkwürdiges Verhalten MySQL

Beitrag von hde »

theo hat recht. Dein Prog macht offenbar beim Schließen einen sauberen Rollback, es fehlt der commit.
offenschtlich gab es da bei den DB-Tools von Lazarus eine Änderung, hat mich aber nicht interessiert weil wir grundsätzlich mit Zeos arbeiten

hellobello
Beiträge: 5
Registriert: Di 30. Sep 2014, 19:44

Re: Merkwürdiges Verhalten MySQL

Beitrag von hellobello »

Ich danke euch, das wars nämlich :D

Ich muss, immer wenn ich änderungen in der DB vornehme, nach dem

Code: Alles auswählen

sqlquery.ExecSql;
ein

Code: Alles auswählen

sqltrans.Commit;
setzen, dann gehts.
Warum ist das so kompliziert...

Egal. Nochmal danke.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Merkwürdiges Verhalten MySQL

Beitrag von hde »

hellobello hat geschrieben:Warum ist das so kompliziert...

Transactions sind sind wichtig, und als Profi sollte man nur DBs einsetzen, die Transactions beherrschen, und die auch nutzen - mach dich mal schlau.

Antworten