Avatar billede s0mmer Nybegynder
09. januar 2009 - 11:49 Der er 3 kommentarer og
1 løsning

Fra SQL sætning til Command

Hej eksperter,

Igen rammer dette spørgsmål nok mest softspot som har hjulpet mig rigtig meget.

gammel kode:
                        SQL = "SELECT Notat,selskabsnummer, notat FROM Notat, NotatTyper "
                        SQL = SQL & " WHERE Notat.NotatTypeID = NotatTyper.NotatTypeID AND Notat.Selskabsnummer = "
                        SQL = SQL & iSelskabsnummer
                        SQL = SQL & " AND NotatType = 'KF - tekst'"
                        SQL = SQL & " ORDER BY STARTDATO DESC"
                        rs.Open SQL, CONN


Mit forsøg på command:
                        strSQL = "SELECT Notat,selskabsnummer,notat FROM Notat,NotatTyper where (Notat.NotatTypeID = ?) AND (Notat.Selskabsnummer = ?) AND NotatType = 'KF - tekst' ORDER BY STARTDATO DESC"

                        set cmd = Server.CreateObject("ADODB.Command")
                        set cmd.ActiveConnection = Conn
                        cmd.CommandType = adCmdText
                        cmd.CommandText = strSQL
                        cmd.Parameters.Append cmd.CreateParameter("@Notat.NotatTypeID", adVarChar, adParamInput, 255, NotatTyper.NotatTypeID)
                        cmd.Parameters.Append cmd.CreateParameter("@Notat.Selskabsnummer", adVarChar, adParamInput, 255, iSelskabsnummer)
                        Set rs = cmd.Execute()


Får fejl:
Object required: "

på linje:
                        cmd.Parameters.Append cmd.CreateParameter("@Notat.NotatTypeID", adVarChar, adParamInput, 255, NotatTyper.NotatTypeID)
Avatar billede softspot Forsker
09. januar 2009 - 12:24 #1
Jeg tror dels det skyldes, at du benytter punktum i et parameternavn (men jeg er dog lidt usikker på dette. Dels at du har misforstået den SQL du forsøger at oversætte, da der i realiteten er tale om en join mellem to tabeller (Notat og NotatTyper) og ikke en kandidat til en parameter, når der skrives:

Notat.NotatTypeID = NotatTyper.NotatTypeID

De rigtige kandidater for parameterisering er felterne:

Notat.Selskabsnummer og
NotatType

Derfor vil jeg mene din SQL og kode skal se således ud:

strSQL = "SELECT Notat, selskabsnummer, notat " & _
        "FROM Notat, NotatTyper " & _
        "WHERE (Notat.NotatTypeID = NotatTyper.NotatTypeID) " & _
        "AND (Notat.Selskabsnummer = ?) " & _
        "AND NotatType = 'KF - tekst' " & _
        "ORDER BY STARTDATO DESC"

set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = Conn
cmd.CommandType = adCmdText
cmd.CommandText = strSQL
cmd.Parameters.Append cmd.CreateParameter("@Selskabsnummer", adVarChar, adParamInput, 255, iSelskabsnummer)
Set rs = cmd.Execute()


Personligt foretrækker jeg nu JOIN-syntaksen:

strSQL = "SELECT Notat, selskabsnummer, notat " & _
        "FROM Notat " & _
        "INNER JOIN NotatTyper ON Notat.NotatTypeID = NotatTyper.NotatTypeID " & _
        "WHERE (Notat.Selskabsnummer = ?) " & _
        "AND NotatType = 'KF - tekst' " & _
        "ORDER BY STARTDATO DESC"
Avatar billede s0mmer Nybegynder
09. januar 2009 - 13:20 #2
softspot > takker endnu en gang :) send svar og du får points
Avatar billede softspot Forsker
09. januar 2009 - 13:30 #3
Velbekomme :)
Avatar billede softspot Forsker
09. januar 2009 - 23:30 #4
Tak for point :)
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