Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# Programm zur Überprüfung der SQL Syntax (https://www.delphipraxis.net/41991-programm-zur-ueberpruefung-der-sql-syntax.html)

mumu 11. Mär 2005 17:06

Datenbank: MySQL • Zugriff über: ODBC

Programm zur Überprüfung der SQL Syntax
 
kennt jemand ein gutes programm, dass einem fehler in der sql syntax besser beschreibt?

ich hab z.b. folgendes statement:
SQL-Code:
INSERT INTO BestellDaten (ID, EMail, Bestellart, BestellungDatum, Kundennummer, Rechnungsnummer, Bestellnummer, Bemerkung)
       VALUES (1000, 'test@bla.de', 1, '2005-12-03 12:13:03', (select max(Kundennummer)+1 from BestellDaten), 0, (select max(Bestellnummer)+1 from BestellDaten), '')
da bekomm ich folgenden fehler:
"Excute Error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select max(Kundennummer)+1 from BestellDaten), 0, (select max(B (1064)"


hat jemand ne idee was da falsch ist?

angos 11. Mär 2005 17:24

Re: Programm zur Überprüfung der SQL Syntax
 
wahrscheinlich ein Problem mit
Delphi-Quellcode:
select max(Kundennummer)+1 from BestellDaten
bin mir nicht sicher, ob das "+1" überhaupt geht, und wenn eher ")select max(Kundennummer) from BestellDaten)+1"

Ein Prog zur Syntaxprüfung kenn ich leider nicht.

mumu 11. Mär 2005 17:45

Re: Programm zur Überprüfung der SQL Syntax
 
also am + 1 liegts net, habs schon weggelassen.

hab das ganze aber jetzt so gelöst:

INSERT INTO BestellDaten (ID, EMail, Bestellart, BestellungDatum, Kundennummer, Rechnungsnummer, Bestellnummer, Bemerkung)
(SELECT 1000, 'test@bla.de', 1, '2005-12-03 12:13:03', Max(Kundennummer)+1, 0, Max(Bestellnummer)+1, '' FROM BestellDaten);



aber kennt jemand ein gutes syntax check programm?

alzaimar 30. Mai 2005 11:39

Re: Programm zur Überprüfung der SQL Syntax
 
Ein SQL-Syntaxcheck bringt Dir nicht so viel, weil mySQL keine SQL-DB ist. Sie tut bloss so. :warn:
mySQL *IST* doch ein Syntaxchecker, es sagt dir doch genau, das da was nicht stimmt. Wesentlich genauer wäre ein Syntaxcheckomat auch nicht.

Meine persönliche Meinung ist, das deine Updateanweisung grauslig ist. Gibt es denn keine anständigen Generatoren in mySQL? AutoInc-Felder? Na, egal.

Versuch doch mal, die 'select' Dinger in der INSERT-Anweisung durch 12345 oder so zu ersetzen. Das sollte gehen.
Dann ist es so, das eine Subquery immer in Klammern stehen sollte (jedenfalls bei MsSQL), also z.B. so:
SQL-Code:
Insert into Foo
  (Bar, Zuff, Nick)
Values
  ('Bar',
 (select max(Zuff) + 1 from Foo),
 (select max(Nick) + 1 from Foo)
  )
Aber nochmal: Grauslig, ich würde sogar sagen: :kotz:

Sharky 30. Mai 2005 12:05

Re: Programm zur Überprüfung der SQL Syntax
 
Zitat:

Zitat von alzaimar
Ein SQL-Syntaxcheck bringt Dir nicht so viel, weil mySQL keine SQL-DB ist. Sie tut bloss so. :warn:

Aha. Und ich dachte eine SQL-DB wird dafür definiert das ich SQL Befehle benutzen kann.

Zitat:

Gibt es denn keine anständigen Generatoren in mySQL? AutoInc-Felder? Na, egal.
Leider nicht richtig. Es gibt zwas die Option AutoInc für ein Feld.... aber eben nur für ein Feld pro Tabelle.
Und SPs werden wohl erst ab Version 5 unterstützt werden.

alzaimar 30. Mai 2005 12:22

Re: Programm zur Überprüfung der SQL Syntax
 
@Sharky: Eine SQL-DB ist eine DB, die den ANSI-SQL Stardard umsetzt. Dazu gehört nicht nur, das sie SQL versteht (das tut DBase III auch, ist aber noch lange keine SQL-DB). mySQL ist eine Tabellenverwaltung, die SQL-Kommandos interpretieren kann. mySQL setzt den ANSI-Standard nicht um (ab V5 soll sie das aber mehr-oder-weniger tun).
Zum Standard gehören u.a. Transaktionen, Views, Stored Procedures, Trigger usw, aber auch die Tatsache, das z.B. sämtliche Strukturinformationen (Views, Tabellennamen, Felder und Feldtypen usw.) in der DB selbst einseh- und änderbar ist.

Zu einer SQL-DB gehört aber auch, das ich den Rechner im laufenden Betrieb ausschalten kann, ohne das die DB darunter leidet. Es muss gewährleistet sein, das höchstens die letzte offene Transaktion nicht gespeichert wurde. Weiterhin muss sie in der Lage sein, jede DB nach einem Crash wieder herzustellen. MSSQL z.B. rödelt nach einem Crash wie ein Weltmeister auf der Platte rum, weil es eine Uraltversion der Daten (die letzte als sicher geltende Version (Stichtwort:CHECKPOINT) nimmt, und die in der Log-Datei enthaltenen Aufzeichnungen über Änderungen etc. so lange anwendet, bis alle Daten wieder ganz sind.

Preisfrage: Was ist die höchste Anzahl von Datensätzen in einer mySQL-DB, die bei einem Rechnercrash zerstört wird?

Nebenbei würde ein SQL-Syntaxchecker auch bei Oracle, MSSQL etc. nix bringen, weil alle den Standard umsetzen, aber sich keiner dran hält. So ist das mit Standards: Alle finden's toll, Alle setzen es um, Alle machen es besser, und Keiner hält sich dran.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz