MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
bullgard
Beiträge: 1642
Registriert: 14.09.2012 23:03:01

MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von bullgard » 11.03.2018 01:08:41

[Debian stable Xfce4.12] Ich benutze eine MySQL-Datenbank und bediene sie über ein LibreOffice-5-Base-Formular-Frontend. Gestern hat MySQL die letzten ~14 Records vergessen, die ich vorgestern eingegeben hatte. Ich schaltete meinen Computer aus und schaltete ihn am nächsten Tag wiede ein. Ähnlich heute 2 Records. I hatte Ctrl+S eingegeben nach jedem einzelnen neuen Record mit Daten. Ich habe das Programm LibreOffice auch explizit durch Drücken von File > Save > 'Quit LibreOffice' vor dem Ausschalten des Computers verlassen.
Wie analysiert man diesen Fehler und repariert ihn?
Die Datenbank besteht schon > 6 Jahre. An so große Daten-Verluste kann ich mich früher nicht erinnern. Es kam manchmal vor, daß genau ein Record verloren ging.
Ich spreche und verstehe SQL nur rudimentär.

Code: Alles auswählen

# journalctl -xb -1 | grep SQL
gibt nichts aus.
/var/log/syslog ist leer
/var/log/mysql.err ist leer.
/var/log/mysql.log hat den letzten Eintrag vom 8. Mai 2017.
Ich habe inzwischen das Problem weiter untersucht und stelle fest, daß kein Record mehr über Record #66482 hinaus dauerhaft gespeichert bleibt.

debianoli
Beiträge: 4068
Registriert: 07.11.2007 13:58:49
Wohnort: Augschburg

Re: MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von debianoli » 11.03.2018 06:54:59

Bin kein Sql Profi, aber das sieht verdächtig danach aus, dass du für deinen Primär-Schlüssel den falschen Integer Typ für größere Datenmengen hast. In dem Fall smallint.

Siehe https://dev.mysql.com/doc/refman/5.7/en ... types.html

bullgard
Beiträge: 1642
Registriert: 14.09.2012 23:03:01

Re: MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von bullgard » 12.03.2018 18:20:40

Code: Alles auswählen

# mysqlcheck --all-databases
gibt aus:
<Name der Datenbank>
warning : Found row where the auto_increment column has the value 0
status : OK
Wie werde ich diese Warnung los?
Mit welcher SQL-Anweisung kann ich die id der Zeile ermitteln, in der der die Autoinkrement-Spalte den Wert 0 hat?
Alle weiteren Prüfungen, die

Code: Alles auswählen

# mysqlcheck --all-databases
vornimmt, beantwortet es mit "OK".
Zuletzt geändert von bullgard am 13.03.2018 09:29:41, insgesamt 1-mal geändert.

bullgard
Beiträge: 1642
Registriert: 14.09.2012 23:03:01

Re: MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von bullgard » 13.03.2018 09:20:24

Hallo debianoli,
debianoli hat geschrieben: ↑ zum Beitrag ↑
11.03.2018 06:54:59
Bin kein Sql Profi, aber das sieht verdächtig danach aus, dass du für deinen Primär-Schlüssel den falschen Integer Typ für größere Datenmengen hast. In dem Fall smallint.

Siehe https://dev.mysql.com/doc/refman/5.7/en ... types.html

Code: Alles auswählen

MariaDB [<datenbankname>]> describe tb1;
gibt aus:
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| id | int(6) | NO | PRI | NULL | auto_increment |
Ich denke, int(6) ist groß genug für alle praktischen Zwecke hier.
Gruß
bullgard

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von pferdefreund » 13.03.2018 10:06:26

mit select * from krumme_tabelle where autoincrementfeld = 0; sollte das gehen. Für krumme_tabelle die betroffene Tabelle einsetzen und für autoincrementfeld das entsprechende Feld.

bullgard
Beiträge: 1642
Registriert: 14.09.2012 23:03:01

Re: MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von bullgard » 13.03.2018 22:13:25

Hallo pferdefreund,
pferdefreund hat geschrieben: ↑ zum Beitrag ↑
13.03.2018 10:06:26
mit select * from krumme_tabelle where autoincrementfeld = 0; sollte das gehen. Für krumme_tabelle die betroffene Tabelle einsetzen und für autoincrementfeld das entsprechende Feld.
Ich habe drei Abfragen versucht:
Abfrage1

Code: Alles auswählen

SELECT * FROM "tb1" WHERE "id"=0
erzeugt ein Fenster, das die ersten 4 Teilen der Tabelle tb1 darstellt und der Zeilenzeiger natürlich auf Neilennummer 0 zeigt.
Abfrage2

Code: Alles auswählen

SELECT * FROM "tb1" WHERE ""auto_increment"=0
erzeugt ein Dialogfenster "LibreOffice Base. Die Dateninhalte konnten nicht geladen werden. Unknown column 'auto_increment' in 'where clause'.
Abfrage3

Code: Alles auswählen

SELECT * FROM "tb1" WHERE "Extra" = 0
erzeugt ein Dialogfenster "LibreOffice Base. Die Dateninhalte konnten nicht geladen werden. Unknown column 'Extra' in 'where clause'.
Damit komme ich nicht weiter. Mir kommen Zweifel, ob das Kommando mysqlcheck überhaupt den Fehler aufgespürt hat, denn es gab ja auch die Zeile aus "status : OK".
Gruß
bullgard

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: MySQL mit LibreOfiice 5 Base-Formular vergißt Records

Beitrag von pferdefreund » 14.03.2018 09:33:10

das wird ja auch nicht mit " " eingegeben. Ich kenne das nur so (Postgresql, Oracle, DB/2 und andere...)
select * from tb1 where !!! und hier muss das Feld stehen, das den autoincrement enthält) = 0;
Beispiel.
tb1 sieht so aus
prikey int auto-increment,
daten1 char(20),
daten2 char(20)....
dann
select * from tb1 where prikey = 0;
und es sollte(n) die Gurke(n) erscheinen. Das ganze nicht in loffice oder wo auch immer, sondern
im mit der Datenbank mitgelieferten Konsolen-Client, wie der bei dir auch immer heißt.
Da so ein Feld normalerweise als unique-Key verwendet wird, sollte auch nur ein Datensatz erscheinen - aber
man weiß ja nie und dein DB-Design kenne ich auch nicht.

Antworten