On 24 Mar 2009 20:09:02 GMT, Jens R. rasmussen
<Jens.R.Rasmussen@uni-c.dk> wrote:
>Da jeg i midlertid søgte i denne nyhedsgruppe på
>fejlmeddelelse, så jeg i et indlæg om "inject" at man skal
>omslutte variablene med ' og " og +
Jeg ville bruge & i stedet for +, men begge dele burde virke.
>Når jeg herefter ændrede StrSQL sætningen til:
>
>strSQL = "Insert into Tilmelding(Hvad, Hvem, Hvornaar)
>Values('"+Forestilling+"', '"+Brugerid+"', Now)"
>
>virkede det efter hensigten.
>
>Men kan nogen fortælle mig hvad syntaksen '"+variabel+"' gør godt
>for - eller henvise til en artikkel om brug af variable i
>INSERT-sætninger mod Access?
SQL-sætningen er en tekststreng.
Tekststrenge kan bygges op ved at lægge forskellige stumper sammen,
normalt med &:
strSamlet = "Tekstdel 1" & " tekstdel 2"
Udskriver du nu strSamlet, får du:
Tekstdel 1 tekstdel 2
Men tekststrenge kan også repræsenteres af en variabel:
strTekst1 = "Tekstdel 1"
- og vi kan nu lave:
strSamlet = strTekst1 & " tekstdel 2"
- som giver samme resultat for strSamlet som ovenfor.
Tekststrenge kan altså bestå af variable (uden anf.tegn) og tekststrenge
(med anf.tegn).
Alt dette ved du sikkert - og har sikkert brugt det flere gange.
Men det er det samme man gør med SQL-strenge.
Tag fx din (jeg har erstattet + med &):
strSQL = "Insert into Tilmelding(Hvad, Hvem, Hvornaar) Values('" &
Forestilling & "', '" & Brugerid & "', Now)"
(vi forudsætter, at det står på én linie)
SQL-strengen består af 3 tekststrenge og 2 variable:
"Insert into Tilmelding(Hvad, Hvem, Hvornaar) Values('"
Forestilling
"', '"
Brugerid
"', Now)"
De 5 dele er "limet" sammen med &
Hvis du kigger på din oprindelige SQL-sætning:
strSQL = "Insert into Tilmelding(Hvad, Hvem, Hvornaar)
Values(Brugerid, Forestilling, Now)"
- så bestod den kun af én tekststreng og altså ikke de 2 variable, du
ønskede.
Den fejlede så, fordi der manglede '-tegn omkring tekststreng-delene
Brugerid og Forestilling.
Hvis der havde været '-tegn omkring, ville den have indsat
"Brugerid"
og
"Forestilling"
- men ikke variablerne:
Brugerid
og
Forestilling
Du undrer dig måske over, hvorfor der ikke står:
.... , #" & Now & "#)"
- for Now er vel en funktion?
Både ja og nej. Som det står her, er det en funktion i ASP, og den vil
(hvis alt går godt) indsætte systemtiden fra ASP-serveren.
Men Now kan også være en funktion i databasen (fx MS Access). Så når den
står som en del af SQL-tekststrengen (som i den der virker hos dig), så
er det databasen, der udfører Now-funktionen og altså tager databasens
systemtid og indsætter.
Til sidst: + eller & ?
+ er summeringstegn
& er streng-konkatenering (-sammenlægning)
(i VBScript ASP)
+ bør bruges til at lægge *tal* sammen med. & til at "lime" tekststrenge
sammen med.
Selv om + også vil virke som "lim", hvis begge dele er tekststrenge, så
vil resultatet være forskelligt, hvis den ene er et tal - eller hvis den
ene variabel indeholder en Null-værdi.
Der er også andre datatype-kombinationer, der kan give forskelle.
Så brug + og & til det, de er beregnet til
Mvh. Jørn
--
Jørn Andersen,
Brønshøj