Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / параметры в запросе / 8 сообщений из 8, страница 1 из 1
20.02.2014, 13:19:59
    #38567435
LeN1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
Есть вот такой запрос к базе данных MySQL
Сайт на ASP

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<%
dim sql, cn, cmdx, x
Set conx = Server.CreateObject("ADODB.Connection") 
conx.Open "DSN=myDSN"


sql = "SELECT xxx,yyy FROM table WHERE id= @p_id"

set cmdx = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset") 

cmdx.ActiveConnection = conx
cmdx.CommandText = SQLTITL
cmdx.Parameters.Append(cmdx.CreateParameter("@p_id", adNumeric, adParamInput, , x))

set rs = cmdx.execute
p=rs("xxx") 
%>


На строке p=rs("xxx") выдает вот такую ошибку - BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.
Запись точно есть, мне кажется что неправильный синтаксис у параметров запроса, т.к. в rs получается ничего нет
...
Рейтинг: 0 / 0
20.02.2014, 13:20:48
    #38567436
LeN1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
Подскажите, пожалуйста, что не так?
...
Рейтинг: 0 / 0
20.02.2014, 13:25:33
    #38567448
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
LeN1,

У этого cmdx нет возможности вывести итоговый запрос после применения параметра?
Я, кстати, вообще в коже не вижу, как из переменной sql текст запроса передается куда-то дальше.
И кто такой SQLTITL ?
...
Рейтинг: 0 / 0
20.02.2014, 13:34:56
    #38567468
LeN1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
Ну пардон не от туда строчку скопировала. Конечно cmdx.CommandText = sql
...
Рейтинг: 0 / 0
20.02.2014, 16:33:18
    #38567782
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
LeN1,
провайдер может не поддерживать именованные параметры

если поддерживает:
- перед добавлением параметров
Код: vbnet
1.
cmdx.NamedParameters = true


если не поддерживает:
Код: vbnet
1.
sql = "SELECT xxx,yyy FROM table WHERE id= ?"


В любом случае перед созданием параметра
Код: vbnet
1.
x = {ИД_ДЛЯ_ПОИСКА}
...
Рейтинг: 0 / 0
21.02.2014, 07:01:54
    #38568283
lenash
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
Сделала вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<%
dim sql, cn, cmdx, x
x=ид_записи
Set conx = Server.CreateObject("ADODB.Connection") 
conx.Open "DSN=myDSN"


sql = "SELECT xxx,yyy FROM table WHERE id= @p_id"

set cmdx = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset") 

cmdx.ActiveConnection = conx
cmdx.CommandText = sql
cmdx.NamedParameters = true
cmdx.Parameters.Append(cmdx.CreateParameter("@p_id", adNumeric, adParamInput, , x))

set rs = cmdx.execute
p=rs("xxx") 
%>


Ошибка теперь вот такая: Microsoft OLE DB Provider for ODBC Drivers ошибка '80040e21'

[MySQL][ODBC 5.1 Driver][mysqld-5.0.51a-24+lenny5-log]Invalid parameter type

на строке set rs = cmdx.execute

С какими параметрами тогда надо?
И как выяснить поддерживает ли провайдер именованные параметры?
...
Рейтинг: 0 / 0
21.02.2014, 08:13:31
    #38568312
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
lenashИ как выяснить поддерживает ли провайдер именованные параметры?почитать документацию
и вы уверены, что параметры задаются собакой? собака в мускле обычно обозначает переменную, перед параметром может стоять двоеточие (а при задании параметра - вообще только его имя без всяких спецсимволов)
впрочем, каждый провайдер работает по-своему, так что ещё раз повторю - смотрите документацию.
...
Рейтинг: 0 / 0
21.02.2014, 14:27:20
    #38568838
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
параметры в запросе
> lenash,
> С какими параметрами тогда надо?
Попробуйте с позиционными параметрами, может будет достаноочно.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<%
dim sql, cn, cmdx, x
x = ид_записи
Set conx = Server.CreateObject("ADODB.Connection") 
conx.Open "DSN=myDSN"

' плейсхолдер - '?' (знак вопроса) 
sql = "SELECT xxx,yyy FROM table WHERE id= ?"

set cmdx = Server.CreateObject("ADODB.Command")
' закомментировано, - всё равно переприсвоится при исполнении команды
' ''Set rs = Server.CreateObject("ADODB.Recordset") 

cmdx.ActiveConnection = conx
cmdx.CommandText = sql

' до лучших времен, - пока не выяснили поддерживает ли провайдер, - закомментировано
'cmdx.NamedParameters = true

' не знаю, действительно ли инициализированы у Вас константы adNumeric, adParamInput
' потому вместо них - их значения
' ''cmdx.Parameters.Append(cmdx.CreateParameter("@p_id", adNumeric, adParamInput, , x))
cmdx.Parameters.Append(cmdx.CreateParameter("@p_id", 131, 1, , x))

set rs = cmdx.execute
p=rs("xxx") 

' ##DEBUG -->
Response.Write "<pre> recordset data:"
if rs.BOF then
    Response.Write "[ recordset is empty ]"
else
    Response.Write rs.getString( , 10, , , "[null]")
end if
Response.Write "</pre><br>"
' ##DEBUG <--

' ##DEBUG or not debug -->
rs.close
set rs = nothing
' ##DEBUG or not debug -->
%>

...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / параметры в запросе / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]