Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-String zu lang ? (https://www.delphipraxis.net/109123-sql-string-zu-lang.html)

Smiley 24. Feb 2008 21:50

Datenbank: Access • Zugriff über: ADO

SQL-String zu lang ?
 
Ich habe einen sehr langen SQL-String, wegen den vielen Feldern, die ich zweimal aufzählen muss.
Gibt es bei der länge des SQL-Textes Probleme ?
Folgender Befehl bringt die Fehlermeldung "Syntaxfehler in der Insert Into-Anweisung".
Wenn ich weniger Felder nehme funktioniert die Anweisung.

Delphi-Quellcode:
  DM.QKat.SQL.text := 'Insert Into Kataloge (PreisDatum,NeuPreisDM,PreisEuro,Kaufdatum,Bildbeschreibung,' +
    'Spur,alteNr,Hersteller,VerpEinh,AbrechnungsEinheit,Land,Artikel,Achsen,WagenTyp,Masse,FahrzeugNr,' +
    'HerkunftFzNr,Verwaltung,System,Epoche,Farbe,Beschriftung,Kupplung,Licht,Raeder,Extras,Zusatz,Ausfuehrung,';
   DM.QKat.SQL.Add(
    'Bildrecht,BaujahrVon,BaujahrBis,Gehaeuse,Fahrgestell,PreisFirma,PreisHerkunft,Limitiert,Quelle,KatDatum,' +
    'Seite,Faktor,Lagermenge,Packung,ohne,Zustand,Erfasst,Fach,Herkunft,Ort,Gluehbirne,Haftstreifen,');
   DM.QKat.SQL.Add(
    'Buegelkupplung,Kupplung-v,Hakenkupplung,Kurzkupplung,Motor,ATMotor,Buersten,Umschalter,Zahnrad1,' +
    'Zahnrad2,Stomabnehmer,Schleifer,Drehgestell,Innenbeleuchtung,GS-Achse,WS-Achse,NEM-Radsatz,RP25-Radsatz,' +
    'Puffer,Zuruestteile,Digital-Decoder)');
   DM.QKat.SQL.Add(
    ' Select PreisDatum,NeuPreisDM,PreisEuro,Kaufdatum,Bildbeschreibung,Spur,alteNr,Hersteller,VerpEinh,' +
    'AbrechnungsEinheit,Land,Artikel,Achsen,WagenTyp,Masse,FahrzeugNr' +
    'HerkunftFzNr,Verwaltung,System,Epoche,Farbe,Beschriftung,Kupplung,Licht,Raeder,Extras,Zusatz,Ausfuehrung,');
   DM.QKat.SQL.Add(
    'Bildrecht,BaujahrVon,BaujahrBis,Gehaeuse,Fahrgestell,PreisFirma,PreisHerkunft,Limitiert,Quelle,KatDatum,' +
    'Seite,Faktor,Lagermenge,Packung,ohne,Zustand,Erfasst,Fach,Herkunft,Ort,Gluehbirne,Haftstreifen,');
   DM.QKat.SQL.Add(
    'Buegelkupplung,Kupplung-v,Hakenkupplung,Kurzkupplung,Motor,ATMotor,Buersten,Umschalter,Zahnrad1,' +
    'Zahnrad2,Stomabnehmer,Schleifer,Drehgestell,Innenbeleuchtung,GS-Achse,WS-Achse,NEM-Radsatz,RP25-Radsatz,' +
    'Puffer,Zuruestteile,Digital-Decoder)' +
    ' From Kataloge' +
    ' Where BestellNr=' + QuotedStr(AktBestNr));

  DM.QKat.ExecSQL;

GuenterS 24. Feb 2008 21:55

Re: SQL-String zu lang ?
 
Zitat:

'AbrechnungsEinheit,Land,Artikel,Achsen,WagenTyp,M asse,FahrzeugNr' +
'HerkunftFzNr,Verwaltung,Sy

da fehlt das ","

omata 24. Feb 2008 22:02

Re: SQL-String zu lang ?
 
Rücke deinen Quellcode mal ordentlich und konsequent ein, dann würdest du auch die eigentlichen Fehler sehen...

Delphi-Quellcode:
DM.QKat.SQL.text :=
  'INSERT INTO Kataloge (PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '                     Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '                     Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '                     Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '                     Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '                     Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '                     Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '                     Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '                     Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '                     Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '                     NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder) ' +
  'SELECT PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '      Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '      Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '      Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '      Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '      Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '      Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '      Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '      Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '      Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '      NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder ' +
  'FROM Kataloge' +
  'WHERE BestellNr = ' + QuotedStr(AktBestNr);

DM.QKat.ExecSQL;
Edit:
Zitat:

Zitat von Smiley
Delphi-Quellcode:
...Zuruestteile,Digital-Decoder)...

Das Komma ist nur einer der Fehler...

Gruss
Thorsten

Smiley 24. Feb 2008 22:19

Re: SQL-String zu lang ?
 
Tut mir leid, dass da soviel Text und so wenig geordnet ist.
Die zwei Fehler habe ich auch gerade gefunden.
Es muss aber noch was drin sein.
Es ging mir vorrangig erst mal darum zu wissen, ob der SQL-Text nicht auf 255 Zeichen oder was anderes begrenzt ist
und ob die CR/LF Zeichen die durch das SQL.ADD mit reinkommen, da auch nicht stören.
Dürfen "-" Zeichen in den Feldnamen drin sein?

Ich werde das ganze noch mal weiter formatieren, dann finde ich den Fehler wohl schon noch.

omata 24. Feb 2008 22:21

Re: SQL-String zu lang ?
 
Also ich würde in einem Spaltenname niemals ein Minuszeichen einbauen. Wenns unbedingt sein muss dann lieber einen Unterstrich. Aber vielleicht hilft es ja diese Spaltennamen in eckige Klammern zu setzen.

Edit: Hab noch einen Fehler gefunden...
Delphi-Quellcode:
DM.QKat.SQL.text :=
  'INSERT INTO Kataloge (PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '                     Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '                     Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '                     Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '                     Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '                     Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '                     Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '                     Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '                     Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '                     Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '                     NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder) ' +
  'SELECT PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '      Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '      Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '      Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '      Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '      Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '      Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '      Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '      Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '      Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '      NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder ' +
  'FROM Kataloge ' +
  'WHERE BestellNr = ' + QuotedStr(AktBestNr);

DM.QKat.ExecSQL;
Gruss
Thorsten

Smiley 24. Feb 2008 22:31

Re: SQL-String zu lang ?
 
Meintest Du den Fehler des fehlenden Leerzeichens bei Kataloge am ende ? (Das wars nicht, hab ich gleich probiert)
Sonst hab ich noch nichts neues entdeckt.

Meinst Du mit "Spaltennamen in Eckige Klammern setzen", die kritischen Namen oder alle ?

omata 24. Feb 2008 22:37

Re: SQL-String zu lang ?
 
Ja das Leerzeichen meinte ich.
Ja nur die Spaltennamen, die ein Minuszeichen enthalten.

Edit: Ist der Spaltenname (Stomabnehmer) richtig? Oder soll das vielleicht Stromabnehmer heissen?

Gruss
Thorsten

Smiley 24. Feb 2008 22:42

Re: SQL-String zu lang ?
 
Ja, es sind tatsächlich die Spalten mit dem minuszeichen drin (z.B. Kupplung-v,).
Ich werde das mit den eckigen Klammern jetzt mal versuchen.

Smiley 24. Feb 2008 22:51

Re: SQL-String zu lang ?
 
Ja, richtig Thorsten (Luchsauge), das mit dem St(r)omabnehmer habe ich glatt übersehen.

Jetzt funktioniert es.

Vielen Dank für Eure Hilfe, das war sehr nett von Euch bei diesem dicken Wust an Feldern.

Hansa 24. Feb 2008 23:21

Re: SQL-String zu lang ?
 
Ist das da dein Ernst ? :shock: Jo, der Name Smiley passt. :lol:

Ich würde mal nach ParamByName -> F1 suchen ! Da dies wohl nicht geht, sonst wäre die Frage überflüssig : die SQL-Statements sind TStrings, insofern steht Add, Clear usw. zur Verfügung. Wieso steht der ganze Kram eigentlich im Programm drin ? Das gehört als grundlegende Eigenschaft in das Dataset -> SQL-Generator etc.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
Seite 1 von 3  1 23      

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