2010-06-30 12 views
0

J'ai une requête comme ceci:ADO dans ASP comme query (VBS)

SELECT TaFellesVaktjournal.*, TaBygg.ByggNavn 
FROM TaFellesVaktjournal LEFT JOIN TaBygg ON 
TaFellesVaktjournal.VaktFellesByggNavnId = 
TaBygg.ByggBudsjtilstEiendom WHERE VaktjFellesDato 
>= @dtfr AND VaktjFellesDato <= @dttl AND (VaktFellesSak 
= @sok OR VaktjFellesHendelse = @sok) ORDER BY 
VaktjFellesDato DESC, VaktjFellesTid DESC 

Cependant, je reçois une erreur indiquant que No value given for one or more required parameters.. J'ai spécifié des valeurs pour @dtfr, @dttl et @sok. En outre, l'erreur disparaît si je supprime les parties contenant @sok (tout après @dttl) à l'ORDER BY.

J'ai fait shure que je spécifie des valeurs pour sok, et que ce n'est pas vide. J'ai même essayé de spécifier 2 paramètres nommés sok (car ils sont deux endroits). Quelqu'un sait comment je peux faire ça?

Le code que j'utilise pour créer des paramètres est le suivant:

Dim conn, cmd, param 
set cmd = server.createobject("adodb.command") 
set param = server.createobject("adodb.parameter") 
set param = cmd.createparameter("@sok", adVarChar, adParamInput, 255, sok) 
cmd.parameters.append param 
+0

Etes-vous sûr du type (adVarChar)? – Fionnuala

+0

De même, au lieu de spécifier 255 comme longueur, faites len (sok). Vous pouvez également ajouter un paramètre dans une ligne de code. Voici comment je vais toujours à ce sujet: AdoCmd.Parameters.Append AdoCmd.CreateParameter ("@ nom", adVarChar, adParamInput, Len (Nom), Nom) – Rob

+0

Oui, adVarChar est correct. Et je sais que vous pouvez le faire en une ligne, mais j'ai plutôt ajouté une fonction qui prend le cmd, le nom, le type, la longueur et la valeur et fait cela avant moi. Je le trouve plus facile à lire :) – Alxandr

Répondre

0

il fonctionnera pour les instructions SQL "normales" similaires à celles des procédures stockées. vous devez définir la propriété CommandType de l'objet de commande à adCmdText pour les instructions sql "normales" ET vous devez utiliser q questionmark "?" au lieu des noms de paramètres.

vous n'avez pas besoin de la méthode d'actualisation, ado le fera automatiquement pour vous. (il n'est utile que pour les procédures stockées non plus)

dim sql 
dim cmd : set cmd = server.createObject("ADODB.Command") 
dim param, rs 

sql = "SELECT TaFellesVaktjournal.*, TaBygg.ByggNavn" &_ 
     " FROM TaFellesVaktjournal" &_ 
     " LEFT JOIN TaBygg ON TaFellesVaktjournal.VaktFellesByggNavnId = TaBygg.ByggBudsjtilstEiendom" &_ 
     " WHERE VaktjFellesDato >= ?" &_ 
     " AND VaktjFellesDato <= ?" &_ 
     " AND (VaktFellesSak= ? OR VaktjFellesHendelse = ?)" &_ 
     " ORDER BY VaktjFellesDato DESC, VaktjFellesTid DESC" 

cmd.ActiveConnection = conn 
cmd.CommandType = adCmdText 

set param = cmd.CreateParameter("dtfr", adVarChar, , 255, dtfr) 
cmd.Parameters.Append param 

set param = cmd.CreateParameter("dtfr2", adVarChar, , 255, dtfr) 
cmd.Parameters.Append param 

set param = cmd.CreateParameter("dttl", adVarChar, , 255, dttl) 
cmd.Parameters.Append param 

set param = cmd.CreateParameter("sok", adVarChar, , 255, sok) 
cmd.Parameters.Append param 

cmd.CommandText = sql 

set rs = cmd.execute 

set param = nothing 
set cmd = nothing 
0

Vous pouvez essayer peuplant la collection de paramètres à l'aide d'une commande de rafraîchissement.

Set cmd.ActiveConnection = oConn 
oCmd.CommandType=adCmdStoredProc 
oCmd.CommandText="ap_Your_spName" 
oCmd.Parameters.Refresh 
oCmd.Parameters("@dtfr") = dtfr 
oCmd.Parameters("@dttl") = dttl 
oCmd.Parameters("@sok") = sok 
oCmd.Execute 

Incitera un aller-retour au serveur, mais les ordinateurs modernes devraient faire face à cela!

+0

Tout d'abord, ce n'est pas un proc stocké, donc ce travail? Et en second lieu, que fait exactement oCmd.Parameters.Refresh? Est-ce qu'il regarde dans la requête pour les paramètres nécessaires? Et troisièmement, si c'est le cas, puis-je obtenir cette liste imprimée d'une manière ou d'une autre? – Alxandr

+0

Comment appelez-vous le SQL? L'actualisation appelle la base de données SQL Server et énumère tous les paramètres requis par la procédure stockée. – Simmo