WHERE als Variable [Erledigt]

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14345
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

WHERE als Variable [Erledigt]

Beitrag von Jan »

Moin,

wenn ich eine Variable mit der Filterbedingung belege, und die dann in den SELECT einbauen will - wie mache ich das korrekt?

also z. B.

Code: Alles auswählen

cFilter := "name = 'Schulze'"
SELECT * FROM adressen WHERE [cFilter]
Jan
Zuletzt geändert von Jan am Mi, 11. Mai 2022 10:29, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 577
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 24 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: WHERE als Variable

Beitrag von Marcus Herz »

Äh, welche DBE?
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14345
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: WHERE als Variable

Beitrag von Jan »

Hallo Marcus,

FOXCDX.

Wobei das vollkommen egal ist. Denn der meckert schon beim kompilieren rum. Ich nehme an weil da der Vergleich fehlt. Die Meldung ist "Syntax error, no more tokens but needed, near <WHERE>"

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2786
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 66 Mal
Danksagung erhalten: 10 Mal

Re: WHERE als Variable

Beitrag von georg »

Hallo, Jan -


die SQL-Syntax ist noch nicht komplett implementiert. Wenn der Compiler das anmeckert, wäre das für mich ein Indiz. Wenn Du eine ausgeschriebene WHERE-Anweisung wie "WHERE kdnummer = 12" verwendest, akzeptiert der Compiler das?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14345
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: WHERE als Variable

Beitrag von Jan »

Hallo Georg,

stimmt, manches will da noch nicht.

Ich hab da mal ein wenig rumgtestet. Die Originalzeile ist länger als das, was ich zuerst gepostet hatte. Weil ich das Resultat in ein Array aus DataObjects schreiben will. Das ist dann:

Code: Alles auswählen

SELECT * FROM adressen INTO object aArray
Das läuft soweit erst einmal einwandfrei, auch auf eine dbf mit FOXCDX. Das Filtern mache ich noch, indem ich vorher einen Scope setze. Da ich aber mit dem Gedanken spiele das nach und nach alles auf SQL umzuschreiben dachte ich, das ich wenn möglich da auch gleich den Scope raus werfe und statt dessen mit WHERE arbeite.

Aber große Überraschung: Das hier gibt genau den gleichen Compiler-Fehler:

Code: Alles auswählen

SELECT * FROM adressen INTO object aArray WHERE adressr = 1
Sobald ich das umschreibe auf

Code: Alles auswählen

SELECT * FROM adressen WHERE adressr = 1 INTO object aArray
Dann wird das korrekt kompiliert, und auch korrekt ausgeführt. Wobei es Sinn macht da abweichend von der SQL-Syntax im WHERE zu schreiben: adressen->adressnr = 1. Sonst wird beim kompilieren eine unbekannte Variable angemahnt. sowas verscuhe ich zu vermeiden, aber es wird wenigstens kompiliert. Andersrum nicht.

Hier machen also die Positionen der Parameter tatsächlich einen Unterschied.

Aber sobald ich da dann wieder die Variable einbauen möchte, wird das wieder nicht mehr kompiliert.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14345
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: WHERE als Variable

Beitrag von Jan »

Moin,

inzwischen hatte ich einige Diskussionen mit Andreas und Frank dazu. Und jetzt läuft es.

Erst einmal: Ein SELECT auf eine dbf funktioneirt ja einwandfrei. Nur das WHERE nicht, sobald das als Variable umgesetzt werden muß. Alaska hat das bestätigt, die Umsetzung ist aber äußerst komplex und daher absehbar nicht geplant.

Wie es geht:

Code: Alles auswählen

FUNCTION leseSaetzeInArray(cAlias, cFeld, cWert)

oStmt      := USqlStatement():new()
oStmt:createVirtualTableFromWorkArea(cAlias)
oStmt:fromChar("SELECT * FROM " + cAlias + " WHERE " + cFeld + "=::wert")
oStmt:wert := cWert
oStmt:build():query(USQL_RESULT_OBJECTS, @aData)

RETURN aData
Das ergibt ein Array aData mit DataObjects mit den passenden Sätze.

Etwas komplexer als ein simples SELECT * FROM (cAlias), aber da ich das ja nur 1x in dieser Funktion mache, ist das kein Problem.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten