ZEOS + MySQL: Fehlermeldungen unterdrücken.

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

ZEOS + MySQL: Fehlermeldungen unterdrücken.

Beitrag von charlytango »

Hi

Bei einer Funktion der ich einen SQL String übergebe (Zeos, TZQuery) möchte ich erreichen dass im Exception-Fall nichts passiert. Also die Exception nicht in irgend einer Messagebox angezeigt wird und damit das Programm stoppt

Hintergrund: Es läuft eine Art Batchverarbeitung bei der automatisch Tabellen und Felder in der DB erzeugt werden sollen. Wenn ich da jedesmal vorher alle Spalten und Tabellen des SQL Statements prüfe dauert das viel zu lange. Daher wählte ich die Strategie erst nach einer Exception die Prüfprozeduren anzuwerfen.

Ich dachte, wenn ich die Exception abfange reicht das. Leider erzeugt ZEOS eigene Fehlermeldungen die angezeigt werden. Kann man die irgendwie (idealerweise temporär) abschalten ?

Code: Alles auswählen

function TdmData.RunSQLExec(const sSQL: string): boolean;
begin
  result:=true;
  try
    if zQuery1.Active then zQuery1.Close;
    zQuery1.SQL.Clear;
    zQuery1.SQL.Add(sSQL);
    zQuery1.ExecSQL;   //<< hier kommt die Fehlermeldung, die ich nicht haben will ;-)
  except
    on E: Exception do
    begin
      //hier bestenfalls eine stille Log-Message
      result:=false;
    end;
  end;
end;


Als sSQL zum Beispiel:

Code: Alles auswählen

INSERT INTO  ttemp ( F1, F2 )  VALUES  ( '12345', 'ABCD');


Annahme: Die Tabelle ttemp existiert noch nicht, daher kommt es zu einer Exception. Allerdings komm ich nicht dahinter wie ich die abschalten könnte ???
Die Fehlermeldung wird in der unit ZDbcMySqlUtils (procedure CheckMySQLError) der Zeos-Komponenten erzeugt.

Bin auch offen für andere Lösungswege.

THX

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ZEOS + MySQL: Fehlermeldungen unterdrücken.

Beitrag von Michl »

Hier geht das problemlos. Ich habe mal ein Testprojekt von mir geladen und folgendes gemacht:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    ZQuery1.SQL.Text := 'INSERT INTO  ttemp ( F1, F2 )  VALUES  (12345, ABCD);';
    ZQuery1.ExecSQL;
  except
    on e: Exception do
      ShowMessage('Meine Fehlermeldung: ' + e.Message);
  end;
end;   

Da ich keine Tabelle "ttemp" in der Datenbank habe, wird per Showmessage die eigene Exception-Meldung angezeigt: "Meine Fehlermeldung: SQL Error: SQL logic error or missing database". Natürlich nur außerhalb der IDE bzw. ohne Debugger, da sonst als erstes der Debugger die Fehlermeldung anzeigt.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten