Avatar billede Slettet bruger
10. februar 2006 - 11:46 Der 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?

- eller kan det slet ikke løses?

\Dan
Avatar billede ldanielsen Nybegynder
10. februar 2006 - 12:04 #1
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?
Avatar billede 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...

- Men det kan ikke lade sig gøre, eller hvad?

\Dan
Avatar billede ldanielsen Nybegynder
10. februar 2006 - 13:55 #3
Alt kan lade sig gøre, men jeg holder weekend nu ...

I access kan du jo bruge vb funktoner som Datediff, Dateserial, Cdate osv direkte i sql'en:

SELECT Date()-DateSerial(year,Rmonth,dag) AS Udtryk1, DateSerial(year,Rmonth,dag) AS Udtryk2
FROM Tabel1;

Måske kan du selv finde ud af noget
Avatar billede Slettet bruger
10. februar 2006 - 16:26 #4
- Det er bare helt i orden Idanielsen!
Kan du have en god weekend!

- Jeg har lidt opgivet den her metode med sql-strengen...
Jeg løste problemet med et par if-sætninger i stedet...

Smid et svar hvis du vil have pointene for en brav indsats...!

\Dan
Avatar billede ldanielsen Nybegynder
13. februar 2006 - 09:28 #5
Kun hvis du synes det var en hjælp ...

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.
Avatar billede 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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester