ASP - Variable in SQL-Statement
Klaus
- sonstiges
Hallo zusammen,
folgendes Szenario in ASP/VBScript:
Ich habe ein Recordset, dass gefüllt ist mit SQL-Statements. In diesen Statements befinden sich wiederum Variablen. Diese Variablen werden beim Ausführen der Statements jedoch leider nicht durch ihren Wert ersetzt, sondern als String im Statement übernommen. Was muss ich tun, damit die Variablen ersetzt werden?
Exemplarisches SQL-Statement:
select * from tabelle where user='& strVariable &'
Programmablauf:
(...)
Dim strVariable : strVariable = "Testuser"
SQLQuery = objRec(0)
Set objRecZwei = DB.Query(SQLQuery)
(...)
Viele Grüße
Klaus
Mahlzeit Klaus,
Diese Variablen werden beim Ausführen der Statements jedoch leider nicht durch ihren Wert ersetzt, sondern als String im Statement übernommen.
Vermutlich wieder ein typisches Beispiel von "Wunsch und Wirklichkeit stimmen nicht überein". Informiere Dich darüber, wo und inwiefern diese beiden auseinandergehen, indem Du Dir Gewissheit verschaffst, wie die Wirklichkeit aussieht ... mit anderen Worten: debugge!
Exemplarisches SQL-Statement:
select * from tabelle where user='& strVariable &'
Das ist schön und gut - interessanter ist aber, was wirklich in der Variablen enthalten ist:
Programmablauf:
(...)
Dim strVariable : strVariable = "Testuser"
SQLQuery = objRec(0)
Lass Dir an dieser Stelle mal ausgeben, was jetzt in der Variablen namens "SQLQuery" enthalten ist.
Informiere Dich anschließend generell zum Thema "Kontextwechsel" (auch wenn dort von PHP die Rede ist: das Prinzip ist das Gleiche).
Wenn Du konkrete weitere Fragen hast, dann melde Dich wieder (und lasse uns dann an Deinen bisherigen Erkenntnissen - insbesondere den Inhalt der Variablen - teilhaben).
MfG,
EKKi
Moin!
Was muss ich tun, damit die Variablen ersetzt werden?
Exemplarisches SQL-Statement:
select * from tabelle where user='& strVariable &'
Nachsehen wie man in ASP einen String aus Strings und Variablen zusammen setzt und wie man Anführungsstriche quotiert. Beachte bitte auch den Kontextwechsel.
Dim strVariable
strVariable="Fred"
Dim strSQL
strSQL= 'select * from `tabelle` where `user`="' & strVariable & '"'
Noch etwas: Auch und gerade in ASP dürfte die pauschale Rückgabe aller Spalten nicht ideal sein. Was, wenn sich die Tabelle ändert? Du überlässt zu viel dem Zufall. Sollte der Inhalt der Variable nicht wie oben gesetzt werden, dann musst Du noch für Sicherheit sorgen in dem Du einige Zeichen maskierst. strVariable könnte sonst z.B. auch den Inhalt 'Fred" or
user LIKE "%"'
haben. Mit entsprechenden Folgen...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Moinsen!
Dim strSQL
strSQL= 'select * fromtabelle
whereuser
="' & strVariable & '"'
Eher nicht. In VBScript leitet ein einfaches Hochkomma ' einen Kommentar ein.
Moin!
Eher nicht. In VBScript leitet ein einfaches Hochkomma ' einen Kommentar ein.
Ja. Stimmt. Immer diese Microsoft-Spezialitäten...
Wie viele Quotas muss er gleich machen um zu kapseln? Korrigiere es einfach.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Moin!
Eher nicht. In VBScript leitet ein einfaches Hochkomma ' einen Kommentar ein.
Ja. Stimmt. Immer diese Microsoft-Spezialitäten...
Wie viele Quotas muss er gleich machen um zu kapseln? Korrigiere es einfach.
Ja. Microsoft is da etwas pervers. Ich bekomme dauernd Probleme wenn ich VBScript und JS programmiere... Auch das maskieren ist eher unuebersichtlich:
gewuenscht:
select ID from table where name = "Hans"
programmiert:
variable = "Hans"
query = "select ID from table where name = """ & name & """"
Ein " wird tatsaechlich mit einem " maskiert > ""
Moin!
query = "select ID from table where name = """ & name & """"
Juchz! Besonders das '""""' finde ich immer wieder "prickelnd".
Ein " wird tatsaechlich mit einem " maskiert > ""
In der Mehrheit der (mir bekannten) anderen Sprachen wird tatsächlich ein '' durch ein '' maskiert. Also '\' notiert. Aber das ist man wenigstens gewöhnt :)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Ein " wird tatsaechlich mit einem " maskiert > ""
In der Mehrheit der (mir bekannten) anderen Sprachen wird tatsächlich ein '' durch ein '' maskiert. Also '\' notiert. Aber das ist man wenigstens gewöhnt :)
Find ich auch noch relativ uebersichtlich, solange man nicht sowas wie \ maskieren will. Das Maskieren von maskierten Maskierungszeichen is immer wieder schoen.
Bei mir sieht dazu " fast genauso aus wie ''. Is schon was laestig.
Hi!
Exemplarisches SQL-Statement:
select * from tabelle where user='& strVariable &'
query ="select * from tabelle where user='" & strVariable & "'"?
Hallo zusammen,
danke euch für die vielen Antworten. Leider konnte ich mein Problem auf die ursprünglich anvisierte Art nicht lösen.
Selbst bei dieser Art von SQL-Statement:
Exemplarisches SQL-Statement:
select * from tabelle where user='"& strVariable &"'Programmablauf:
(...)
Dim strVariable : strVariable = "Testuser"
SQLQuery = objRec(0)
Set objRecZwei = DB.Query(SQLQuery)
(...)
Füllt er mir SQLQuery mit "select * from tabelle where user='"& strVariable &"'", was eigentlich korrekt sein müsste.
Ich habe das ganze nun über ein Replace() gelöst. Noch eine Anmerkung zum Hintergrund: Die Statements liegen in einer Datenbank und sollen beim Aufruf anhand des Benutzernamens dynamisch zur Rechteprüfung eingesetzt werden. Ich nehme an, dass es an der Stelle auch zu den Schwierigkeiten gekommen ist. EKKi vermutete ja auch ein Problem beim Kontextwechsel.
Nochmal besten Dank!!!
Viele Grüße
Klaus
Natuerlich!!
Ich verstehe erst jetzt dein Posting in seiner ganzen Pracht! Klar. Du hast Queries in der Datenbank als String gespeichert. So einen String (was defacto etwas anderes als ein Query ist) willst Du nun mit Werten versehen und als Query absetzen. Das machst Du mit Replace ganz richtig. Am Besten der Query enthaelt Paltzhalter:
z.B.
select * from @@TABELLE@@ where name = "@@NAME@@" and anzahl = @@ANZAHL@@
Diese Platzhalter dann mit Replace ersetzen.
Mein Chef haelt Queries in der Datenbank in verschiedenen Feldern pro Query vor:
qry1: select * from
qry2: where name = "
qry3: " and anzahl =
query = qry1 & varTable & qry2 & varName & qry3 & varAnz
Natuerlich reichen 3 Felder nicht fuer jeden Query...
Ganz grosser Mist. Davon ist nur abzuraten. Replace ist toll, Replace ist gut! Hab erst die Tage Ewigkeiten damit verbracht einem Kollgen sowas zu erklaeren. Bekomm ich aber nicht in meine Kollegen rein. :(
Mahlzeit Steel,
Hab erst die Tage Ewigkeiten damit verbracht einem Kollgen sowas zu erklaeren. Bekomm ich aber nicht in meine Kollegen rein. :(
Wer solche Kollegen hat, braucht keine Feinde mehr ... mein herzlichstes Beileid.
MfG,
EKKi
Natuerlich!!
Ich verstehe erst jetzt dein Posting in seiner ganzen Pracht! Klar. Du hast Queries in der Datenbank als String gespeichert. So einen String (was defacto etwas anderes als ein Query ist) willst Du nun mit Werten versehen und als Query absetzen. Das machst Du mit Replace ganz richtig. Am Besten der Query enthaelt Paltzhalter:
Ganz genau! Man so etwas ist verdammt schwer zu erklären... ;-)
Meine Platzhalter sind mit Doppelpunkt markiert (":platzhalter"), da Toad diese dann sogar selbst befüllen kann.
Viele Grüße
Klaus