[gelöst] MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
oleg
Beiträge: 28
Registriert: So 6. Okt 2019, 17:04
OS, Lazarus, FPC: Win10Pro-(Laz 2.2.0 - FPC 3.2.0)-Rasp4(8GB)+MySQL+GITEA 1.20.2 <-> GIT 2.44.0
Wohnort: Leipzig

[gelöst] MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Beitrag von oleg »

Hallo, ich schreibe eine Funktion um die Tabellen einer MySQL Datenbank zu prüfen. Zugriff über Zeos MySQL;
dazu hole ich mir die Namen der Tabellen in eine Stringliste

Code: Alles auswählen

SHOW TABLES
Anschließend lauf ich durch die StringListe und führe die Operation aus

Code: Alles auswählen

  procedure CheckTable(Tabelle: String); 
   begin
    with DataModul.ZQuery_tmp do begin
      Close;
      SQL.Clear;
      SQL.Add('CHECK TABLE :Tab');
        ParamByName('Tab').AsString := Tabelle;
      Open;  // möglicherweise auch mit ExecSQL; 
    end;
Laut der offiziellen MySQL Dokumentation https://dev.mysql.com/doc/refman/8.0/en ... table.html sollte jetzt etwa ein Ergebnis in Form kommen:

Op: check
Msg_type: status
Msg_text: OK
Ich bekomme allerdings die SQL Fehlermeldung für fehlerhafte "Syntax". Die Abfragen mit Parametern funktionieren sonst alle.

die weiteren Vorgehensweisen sind dann:
ANALYZE TABLE tabelle // -Msg_text = Table is alredy up to date
REPAIR TABLE tabelle // -Msg_text = OK
OPTIMIZE TABLE tabelle
Zuletzt geändert von oleg am Mi 15. Mär 2023, 22:04, insgesamt 1-mal geändert.

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

Re: MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Beitrag von theo »

Bin wahrlich kein Experte, aber vielleicht ist es einfach kein SQL-String, was da erwartet wird?
Vielleicht mal ohne die Parameter probieren ohne Hochkomma etc.
CHECK TABLE MeineTabelle

oleg
Beiträge: 28
Registriert: So 6. Okt 2019, 17:04
OS, Lazarus, FPC: Win10Pro-(Laz 2.2.0 - FPC 3.2.0)-Rasp4(8GB)+MySQL+GITEA 1.20.2 <-> GIT 2.44.0
Wohnort: Leipzig

Re: MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Beitrag von oleg »

Du bist der beste: manchmal sieht man den Wald vor lauter Bäumen nicht.

Code: Alles auswählen

  procedure CheckTable(Tabelle: String); 
   begin
    with DataModul.ZQuery_tmp do begin
      Close;
       SQL.Clear;
       SQL.Add('CHECK TABLE ' + Tabelle + '');
      Open;
    end;

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Beitrag von af0815 »

Theo hat recht. Bei Tabellennamen, Spaltennamen können keine Parameter verwendet werden. Deswegen geht das nur so. Ob man jetzt Open oder Execute verwendet hängt ganz einfach davon ab, ob die Operation ein Resultset zurückliefert. Faustregel: Ist ein Select dabei, gibt es ein Resultset, daher Open ansonsten Execute (ExecSQL). Eine Sonderform ist hier, wenn man sich die von dir verlinkte Doku ansieht
CHECK TABLE returns a result set with the columns shown in the following table.
Daher braucht man hier vollkommen richtig ein Open. Es ist daher am besten man sieht sich die Doku der DB mal an. Das sind keine standardisierte Befehle, da sollte man immer RTFM machen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

oleg
Beiträge: 28
Registriert: So 6. Okt 2019, 17:04
OS, Lazarus, FPC: Win10Pro-(Laz 2.2.0 - FPC 3.2.0)-Rasp4(8GB)+MySQL+GITEA 1.20.2 <-> GIT 2.44.0
Wohnort: Leipzig

Re: MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Beitrag von oleg »

af0815 hat geschrieben:
Mi 15. Mär 2023, 13:05
Theo hat recht. Bei Tabellennamen, Spaltennamen können keine Parameter verwendet werden. Deswegen geht das nur so. Ob man jetzt Open oder Execute verwendet hängt ganz einfach davon ab, ob die Operation ein Resultset zurückliefert. Faustregel: Ist ein Select dabei, gibt es ein Resultset, daher Open ansonsten Execute (ExecSQL). Eine Sonderform ist hier, wenn man sich die von dir verlinkte Doku ansieht
CHECK TABLE returns a result set with the columns shown in the following table.
Daher braucht man hier vollkommen richtig ein Open. Es ist daher am besten man sieht sich die Doku der DB mal an. Das sind keine standardisierte Befehle, da sollte man immer RTFM machen.
Viele Dank nochmal für die schnellen Denkanstöße. Thread kann als gelöst markiert werden.
Hatte noch nie so wirklich darauf geachtet, dass Parameter für Tabellen und Spalten nicht verwendet werden dürfen. Das ist jetzt auch wieder fest gelernt.
Die Verwendung von Open und ExecSQL ist absolut klar und logisch.

sstvmaster
Beiträge: 576
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: MySQL ZEOS: CHECK, ANALYZE, REPAIR, OPTIMIZE

Beitrag von sstvmaster »

oleg hat geschrieben:
Mi 15. Mär 2023, 21:29
...
Thread kann als gelöst markiert werden.
...
Das musst du selber machen. Gehe in deinen 1. Betrag -> Bearbeiten -> Titel ändern, zb. [gelöst], davor -> Absenden
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Antworten