Neu Gelöst - SQL Direct Query gibt Fehler aus bei Nutzung von Variable

stgb

Mitglied
15. Oktober 2021
24
0
Hey,

ich bin vollkommen unwissend was SQL daher sorry falls das hier eine richtig simple Sache ist:
Kann mir jemand sagen wieso diese Abfrage nicht funktioniert?

SQL:
JTL_DirectQuery("SELECT cVersandlandISO  FROM tBestellung WHERE cBestellNr = "+Vorgang.Auftrag.Auftragsnummer)

Als Fehlermeldung bekomme ich:
Code:
Ungültiger Spaltenname: "AU"
Ungültiger Spaltenname "U"

Vorgang.Auftrag.Auftragsnummer = AU-206419-U

Wenn ich die Abfrage so schreibe, funktioniert es problemlos:
SQL:
JTL_DirectQuery("SELECT cVersandlandISO  FROM tBestellung WHERE cBestellNr = 'AU-206419-U'")

Ich brauche aber die Variable weil ich auf der Rechnungsvorlage das Versandland für die angezeigt USt-ID benötige :/

Kann mir jemand einen Tipp geben woran es liegt? Muss ich die Variable noch umwandeln? mit ToString$() hat es nicht funktioniert.
 

stgb

Mitglied
15. Oktober 2021
24
0
Du musst die Variable mit ' ' schreiben, also 'Vorgang.Auftrag.Auftragsnummer' . Dann sollte es klappen.

MfG,
André
Wenn ich es so schreibe geht wird die Variable aber als Zeichenkette angesehen:
SQL:
JTL_DirectQuery("SELECT cVersandlandISO  FROM tBestellung WHERE cBestellNr = "+'Vorgang.Auftrag.Auftragsnummer')

Und ich bekomme die Fehlermeldung der mehrteilige Bezeichner "Vorgang.Auftrag.Auftragsnummer" konnte nicht gebunden werden (wirklich gebunden oder ist das evtl ein Rechtschreibfehler und soll gefunden heissen?)
 

baumaschinenteile24

Sehr aktives Mitglied
2. Mai 2012
427
63
Ach ja, Quatsch, das geht so direkt gar nicht. Du musst es mit capture machen. Also
{% capture SQLquery %}SELECT cVersandlandISO FROM tBestellung WHERE cBestellNr = "+'Vorgang.Auftrag.Auftragsnummer'; {% endcapture %}.
Dann kannst du die Variable SQLquery für deine Abfrage nehmen. Das ist dann ein kompletter String mit deiner Auftragsnummer drin.

MfG,
André
 
  • Gefällt mir
Reaktionen: stgb

stgb

Mitglied
15. Oktober 2021
24
0
Ach ja, Quatsch, das geht so direkt gar nicht. Du musst es mit capture machen. Also

Dann kannst du die Variable SQLquery für deine Abfrage nehmen. Das ist dann ein kompletter String mit deiner Auftragsnummer drin.

MfG,
André

Hey,
danke erstmal für die Hilfe, leider funktioniert auch dies bei mir nicht.

Kann man diese Form von Query überhaupt in den Druckvorlagen anwenden?
Ich versuche mich parallel gerade dazu einzulesen.

Bei deiner Formel scheint ein " zu viel oder zu wenig zu sein, nehme ich das vorhandene weg, erhalte ich die Fehlermeldung '{' kann nicht interpretiert werden :/
 

jtldudel

Sehr aktives Mitglied
4. Januar 2018
630
199
JTL_DirectQuery("SELECT cVersandlandISO FROM tBestellung WHERE cBestellNr ='" + Vorgang.Auftrag.Auftragsnummer + "'")
 
  • Gefällt mir
Reaktionen: stgb

stgb

Mitglied
15. Oktober 2021
24
0
JTL_DirectQuery("SELECT cVersandlandISO FROM tBestellung WHERE cBestellNr ='" + Vorgang.Auftrag.Auftragsnummer + "'")

Super, vielen Dank das hat geklappt!

Sieht für mich als Laie zwar etwas umständlich und nicht richtig nachvollziehbar aus wieso da eine Mischung aus " und ' davor und danach stehen müssen, aber ich denke das muss so damit das richtig interpretiert wird.

Vielen Dank!
 

baumaschinenteile24

Sehr aktives Mitglied
2. Mai 2012
427
63
Hey,
danke erstmal für die Hilfe, leider funktioniert auch dies bei mir nicht.

Kann man diese Form von Query überhaupt in den Druckvorlagen anwenden?
Ich versuche mich parallel gerade dazu einzulesen.

Bei deiner Formel scheint ein " zu viel oder zu wenig zu sein, nehme ich das vorhandene weg, erhalte ich die Fehlermeldung '{' kann nicht interpretiert werden :/
Gute Frage, ich hatte das in einem Workflow so gelöst. Man kann auch in Formularen Variablen definieren, wenn mich nicht alles täuscht, aber da stecke ich nicht so drin, jtldudel's Lösung ist mindestens mal deutlich weniger umständlich.

Mfg;
André
 
  • Gefällt mir
Reaktionen: stgb

jtldudel

Sehr aktives Mitglied
4. Januar 2018
630
199
Gute Frage, ich hatte das in einem Workflow so gelöst. Man kann auch in Formularen Variablen definieren, wenn mich nicht alles täuscht, aber da stecke ich nicht so drin, jtldudel's Lösung ist mindestens mal deutlich weniger umständlich.

Mfg;
André
In dem Vorlageneditor müssen die vorgefertigten Funktionen verwendet werden, für die DB Abfragen ist das die Funktion JTL_DirectQuery(). Bei Workflows (und an vielen anderen Stellen in JTL wo der dotLiquid Editor verwendet wird) funktioniert deine Idee mit dem Capture. Der Vorlageneditor macht das so halt nicht, deshalb hier nicht anwendbar.
 
  • Gefällt mir
Reaktionen: baumaschinenteile24

Ähnliche Themen