/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Det virker - men hvorfor ?
Fra : Jens R. rasmussen


Dato : 24-03-09 21:09

Jeg har lært at læse fra databaser (Access) og også lært at
skrive til samme. Men da jeg i stedet for faste værdi ville
indsætte en variabel gav det fejlmeddelelsen: Der er for få
parameter".

I min databaser er der 3 tabeller. En Kunder-tabel, en
Arrangementer-tabel og en Tilmelding-tabel. Når en bruger via en
form vil lave en tilmelding, henter jeg brugerens id fra
Kunder-tabellen og arrangements id fra arrangementer-tabellen og
vil så herefter lægge følgende 3 oplysninger ind i
Tilmeldingstabellem
- brugerid
- arrangements-id
- tidpunkt for tilmelding.

Jeg gemmer lokalt de 2 første data i variablene Brugerid hhv.
Forestilling (inden jeg lukker forbindelsen Conn.close)

Jeg lavede så sætningen
strSQL = "Insert into Tilmelding(Hvad, Hvem, Hvornaar)
Values(Brugerid, Forestilling, Now)"

og fik så ovennævnte fejl med at den manglede 2 parametre. Jeg
forsøgteb lidt i blinde med ' og med " omkring alt - men intet
virkede. 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 +

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?

mvh
Jens R. Rasmussen

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jørn Andersen (24-03-2009)
Kommentar
Fra : Jørn Andersen


Dato : 24-03-09 22:01

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

Stig Johansen (25-03-2009)
Kommentar
Fra : Stig Johansen


Dato : 25-03-09 06:21

Jørn Andersen wrote:

> 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.

Jeg synes lige jeg vil præcisere, at #-syntaxen ved tekstformaterede datoer
er en (pisseirriterende[1]) Access specifik syntax, som, i hvert fald 'før
i tiden' kun virker med US dato format (MM/DD/YYYY).
Andre databaser bruger typisk '<ISO dato>' til datoer.

[1] Det, kombineret med, at Access ikke understøtter parametre i joins, gav
mig nogle 'udfordringer' engang ;)

--
Med venlig hilsen
Stig Johansen

Jørn Andersen (25-03-2009)
Kommentar
Fra : Jørn Andersen


Dato : 25-03-09 09:26

On Wed, 25 Mar 2009 06:20:43 +0100, Stig Johansen <wopr.dk@gmaill.com>
wrote:

>Jeg synes lige jeg vil præcisere,
>at #-syntaxen ved tekstformaterede datoer
>er en (pisseirriterende[1]) Access specifik syntax,

Tak for det - og jeg er enig.

Jeg var godt klar over, da jeg skrev det, at den ikke var alt for fin.
Men dels var forkalringen blevet ret lang i forvejen, og dels var det
ikke vigtigt for det spørgeren egentlig ville have forklaret. Så jeg
sprang over den del, hvor gærdet var lavest.

>som, i hvert fald 'før
>i tiden' kun virker med US dato format (MM/DD/YYYY).

Jeg tror, det virker, når database og ASP-server bruger samme sprog -
men hæng mig ikke op på det.

>Andre databaser bruger typisk '<ISO dato>' til datoer.

Og i Access vil man typisk bruge databasens
DateSerial/TimeSerial-funktioner i SQL'en.



Mvh. Jørn

--
Jørn Andersen,
Brønshøj

Rune Jensen (25-03-2009)
Kommentar
Fra : Rune Jensen


Dato : 25-03-09 17:47

Jørn Andersen skrev:

> SQL-sætningen er en tekststreng.

Hvilket er årsagen til, man bruger &, når den lægges sammen

> Tekststrenge kan bygges op ved at lægge forskellige stumper sammen,
> normalt med &:
>
> strSamlet = "Tekstdel 1" & " tekstdel 2"

Man bruger + til at lægge tal og talvariable sammen, mens & bruges til
tekststrenge. Da der ikke på forhånd defineres i VBscript, hvilken slags
variabel, man arbejder med, kan man få nogle sjove resultater, hvis
ikke, man er klar over det.

a=5
b=6

c=a & b

response.write c

burde give 56

eller
c=a+b

response.write c

burde give 11


Korrekt?

Og
a="5"
b="6"

Vil det give samme resultat, om man bruger & eller +


?

Når en tekststrng lægges sammen med en talvariabel, så vil talvariablen
også blive opfattet som en streng, hvorfor det er (i princippet)
ligegyldigt, om man bruger & eller +

?


MVH
Rune Jensen

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste