Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#46

AW: ADOQuery - SQLQuery ??

  Alt 19. Apr 2017, 14:26
Zitat:
Das scheint hier grundsätzlich so gelöst zu werden Query.SQL.Text wir wohl nur von den wenigsten Komponenten angeboten.
Welche Komponenten meinst du? Ich kenne keine die SQL.Text nicht hat.
Ich auch nicht, aber dieses
Delphi-Quellcode:
Query.SQL.Clear;
Qhery.SQL.Add('Select * ');
Query.SQL.Add('from My Table');
Oder wenn ich per ExecSQL 'ne Datenbankprozedure erstellen möchte:

Dann wird der Quelltext der Prozedur halt zeilenweise per SQL.Add übernommen.

überlebt und überlebt und ......
Und jeder Anfänger übernimmt es......

Gruß
K-H
Und als Fortgeschrittener nutze ich es auch.

Bei 'nem effen Select * from Tabelle mag Text ausreichen, aber bei etwas größeren und verschachtelten Statements ist eine (halbwegs) ordendliche Formatierung auch nicht zu verachten. Macht Statements irgendwie lesbarer.

Und in 'ner Fehlermeldung lässt sich so ein mehrzeiliges Statement deutlich besser lesen.
Delphi-Quellcode:
on e : Exception do begin
  MessageDlg('Fehler: ' + e.Message + #13#13 + qry.SQL.Text,mtError,[mbOk],0);
end;
hat dann durchaus schon was.

Etwas derartiges "http://www.delphipraxis.net/1367008-post24.html" könnte man natürlich als Einzeiler in SQL.Text pappen, aber wird das dann wirklich lesbarer und welchen Vorteil hat es, wenn man bei 'ner Stringliste immer nur Text nutzt?

Achja: Und wie macht ihr es, wenn ihr mal mit einem ExexSQL mehrere Statements an die Datenbank abgeben wollt?

Ich nehme dann für jedes Statement per SQL.Add eine Zeile, dann haben 50 Statements eben 50 Zeilen in der Stringliste. Klar, könnte man auch alles in 'ner Schleife per SQL.Text := SQL.Text + ' ' + NächstensStatement machen, aber ist da SQL.Add nicht irgendwie einfacher?

Irgendwie so:
Delphi-Quellcode:
qry.SQL.Clear;
qry.SQL.Add('create procedure PR_MD5_Dubletten_Verschieben as');
qry.SQL.Add('begin');
qry.SQL.Add(' insert into dubletten select * from tabelle where kategorie = ''MD5-Dublette'';');
qry.SQL.Add(' delete from tabelle where kategorie = ''MD5-Dublette'';');
qry.SQL.Add('end;');
Klar, könnte man auch so machen: qry.SQL.Text('create procedure PR_MD5_Dubletten_Verschieben as begin insert into dubletten select * from tabelle where kategorie = ''MD5-Dublette''; delete from tabelle where kategorie = ''MD5-Dublette''; end;'; Aber erhöht das jetzt wirklich die Les- und Wartbarkeit?

Achso: Variable Inhalte füge ich per Format-Anweisung ein, und nicht wie im Beispiel als "festen Quelltext".
Und die Formatanweisung nutze ich nur, wenn aufgrund der Art des Statementes die Nutzung von Parametern nicht möglich ist. Dies ist z. B. dann der Fall, wenn eine Abfrage für unterschiedliche Tabellen genutzt wird oder, wie im Beispiel, Prozeduren erstellt werden, die (natürlich) über unterschiedliche Namen verfügen ...
  Mit Zitat antworten Zitat