Общие > Веб-технологии
непонятный глюк ADO Recordset ?!?!?
Dmitry25600:
Значит так:
sql = "select * from table1 where k = 1"
set rs = server.CreateObject("ADODB.Recordset")
set rs = connection.execute(sql)
Значения получены нормально и большинство можно вывести:
response.write(rs_prod.Fields("targetph"))
...
но на некоторой записи:
response.write(rs_prod.Fields("some_name"))
НИЧЕГО НЕ ВОЗВРАЩАЕТ!!!
И так все записи после этой. При этом никаких ошибок сервер не возвращает.
Что это такое и как с этим бороться?
.:cRaw:.:
слишком мало информации чтобы чтото сказать... нужно пробовать.
Dmitry25600:
Вот и мне ее что-то маловато :)
проблема так и осталась...
Похоже, что при большом кол-ве полей в записи происходит какой-то сбой в ADO.
Нулевые значения отпадают. Неправильные имена полей тоже.
Обойти проблему можно переписав результат запроса в массив перед обработкой значений.
Но чертовски интересно было бы знать суть проблемы.
Xander:
У меня была такая же фигня. Пришлось отказаться от полного вывода записей в пользу постраничного. Кстати, тебе браузер при этом говорит, что сервер закрыл соединение?
vlad:
1) Уберём хеширование в ADO:
\' по запиям идём только вперёд - и нет хешировния
rs_prod.CursorType = adOpenForwardOnly
2) конфигурируем курсор :
\' назначение клиентного курсора ( быстрый сброс данных с удалённой базы данных ) - предпочтительно для Access
rs_prod.CursorLocation = adUseClient
- работаем базой в темпе вальса ( предпочтительно для Oracle )
rs_prod.CursorLocation = adUseServer
3) корректный вывод:
response.write server.HTMLEncode("" & rs_prod.Fields("some_name"))
Не надо указывать скобки при вызове функции VBScript без возвратного значения.
4) Если у тебя скрипрт будет долго работать указывай Server.ScriptTimeout = 60
( время - в секундах ) и не забудь убрать буферизацию Response.Buffer = 0
Ну и на закуску - укажи в начале скрипта какой ADO используешь :
Успехов тебе.
Навигация
Перейти к полной версии