10. februar 2006 - 11:46Der er
5 kommentarer og 1 løsning
referere til function i sql-streng
Hejsa jeg har følgende function: <% function alder(age) alder = age if isdate(alder) then if DateValue(Now) < DateValue(Day(alder) & "-" & Month(alder) & "-" & Year(Now)) then alder = DateDiff("yyyy",alder,now())-1 else alder = DateDiff("yyyy",alder,now()) end if else alder = "" end if end function %> og senere hen i scriptet har jeg følgende sql-streng: <% strChild = "select * from members WHERE alder(dag & "-" & Rmonth & "-" & year)='" & Request.QueryString("compare") & "' AND allowed=true ORDER BY fornavn, efternavn" %> - men jeg får følgende fejl når jeg eksekverer det: Microsoft VBScript runtime error '800a000d'
Type mismatch: '[string: "select * from member"]'
linien den siger der er fejl på er den linie hvor sql-strengen står... Kan man ikke referere til en function i en sql-streng??? Det synes jeg nemlig jeg har gjort før... Jeg skal lige sige at datatyperne i databasen er forskellige... dag er: "Tekst" Rmonth er: "Tal" year er: "Tekst"
- kan dette problem løses uden at vi skal til at lave noget om i databasen?
Hvordan skulle den færdige strChild se ud, for eksempel?
Og nej, du kan ikke kalde din funktion på den måde. Se her
strSQL = "SELECT * FROM Table WHERE Col1 = '" & minFunktion(value) & "'"
Det virker. Du bruger funktionen til at hente en værdi, og resultatet bliver foe eksempel:
SELECT * FROM Table WHERE Col1 = 'modificeret værdi'
Men dette
strSQL = "SELECT * FROM Table WHERE Col1 = minFunktion('" & value & "')"
virker ikke, for resultatet bliver
SELECT * FROM Table WHERE Col1 = minFunktion('en værdi')
Det kræver altså at databasen forstår funktionen minFunktion, og den findes jo kun i din asp.
Med MSSQL kan man lave funktioner i selve databasen. Hvilken database bruger du?
Synes godt om
Slettet bruger
10. februar 2006 - 13:36#2
Hej
- Jeg bruger et Access-database.
sql-strengen skal finde dem som har den alder som min querystring "compare" angiver... Dette vil sige at hvis for eksempel at querystringen har en værdi på 20 så skal sql-strengen finde alle de poster på dem som er 20 år gamle i min bruger-tabel... Der er dog et par problemer forbundet hermed, og det er derfor jeg har lavet denne funktion... Der står ikke i databasen hvor gamle de forskellige de er. Der er kun en fødselsdato at gå ud fra, og denne er opdelt i tre forskellige kollonner, nemlig: "dag", "Rmonth" og "year"... Derfor var idéen med den funktion at den føst skulle finde ud af alderen på hver person i en post, og at den så derefter skulle sammenligne med querystringen i sql-strengen...
I hvert fald havde du forkert fat i det med hvor ASP'en foregår og hvor SQL'en foregår. Jeg håber at mit første indlæg opklarede det lidt.
I forbindelse med Access er det ekstra forvirrende, fordi man som sagt godt kan bruge VBFunktioner (egl.: VBA) i SQL'en, men som udgangspunkt kun det indbyggede funktioner.
For at forvirre det komplet, kan du, i en Access-fil, oprette et VBA module og skrive din funktion der, og så vil du kunne gøre omtrent det du startede med at forsøge. Jeg har bare ingen anelse om hvad det vil indebære performancemæssigt, jeg ved blot det kan gøres. Og så skal databasen sandsynligvis tages offline hver gang du skal rette det mindste i modulet. Jeg vil ikke anbefale den vej.
Synes godt om
Slettet bruger
13. februar 2006 - 16:10#6
Mange tak for denne opklaring Idanielsen!
Jo! Du kan tro det har været en hjælp det her!
- Mange tak!
\Dan
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.