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)
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"