2010-06-30 1 views
0

У меня есть запрос, как это:ADO LIKE запроса в ASP (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 

Однако я получаю ошибку о том, что No value given for one or more required parameters.. Я указал значения для @dtfr, @dttl и @sok. Кроме того, ошибка исчезает, если я удаляю элементы, содержащие @sok (все после @dttl), в ORDER BY.

Я сделал shure Я указываю значения для sok и что он не пуст. Я даже попробовал указать 2 параметра с именем sok (так как они два места). Кто-нибудь знает, как я могу это сделать?

кода я использую для создания параметров заключается в следующем:

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

Вы уверены, тип (adVarChar)? – Fionnuala

+0

Кроме того, вместо указания 255 в качестве длины сделайте len (sok). Вы также можете добавить параметр в 1 строку кода. Вот как я всегда об этом говорю: AdoCmd.Parameters.Append AdoCmd.CreateParameter («@ name», adVarChar, adParamInput, Len (Name), Name) – Rob

+0

Да, adVarChar верен. И я знаю, что вы можете сделать это в одной строке, но я скорее добавил функцию, которая принимает cmd, имя, тип, длину и значение и делает это для меня. Мне становится легче читать :) – Alxandr

ответ

0

он будет работать для «нормальных» SQL-заявлений, похожих на работу хранимых процедур. вам нужно установить свойство CommandType объекта команды в adCmdText для «нормальных» SQL-операторов, и вы должны использовать q questionmark «?». вместо имен параметров.

Вам не нужен метод обновления, который ado сделает это автоматически для вас. (это полезно только для хранимых процедур)

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

Вы можете попробовать наполнение коллекции параметров с помощью команды обновления.

Повреждение в оба конца на сервере, но современные компьютеры должны справиться с этим!

+0

Прежде всего, это не хранимая процедура, так это будет работать? И, во-вторых, что делает oCmd.Parameters.Refresh точно? Посмотрите в запросе необходимые параметры? И в-третьих, если да, могу ли я как-нибудь напечатать этот список? – Alxandr

+0

Как вы называете SQL? Обновление делает звонок в базу данных SQL Server и перечисляет все параметры, необходимые для хранимой процедуры. – Simmo