0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
1

Св-во RecordCount объекта RecordSet возвращает -1

29.07.2008, 21:52. Показов 3285. Ответов 20
Метки нет (Все метки)

???
почему... хотя в RecordSet на самом деле есть записи...
может как-то по другому надо определять колличество записей RecordSet?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2008, 21:52
Ответы с готовыми решениями:

Recordset.RecordCount в JavaScript
Данное свойство почему-то независимо от числа записей в наборе выдает значение -1. Как с этим...

RecordCount возвращает значение -1
помогите справится с этим куском, RecordCount возвращает значение -1, как такое может быть? <%...

Что лишнее возвращает Recordset
Не работает строка вида If objRecordset(2)="yes" Then ..... точнее не срабатывает if. Переменная...

Проблемы с кодом Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update()
Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update() //----------дает результат 1...

20
4 / 4 / 1
Регистрация: 18.02.2008
Сообщений: 118
30.07.2008, 07:57 2
Сколько раз можно писать, что тип курсора должен быть adOpenStatic.
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 13:32  [ТС] 3
ну спасибо что еще раз сказали

только не помогает ???
БД MySQL, если это о чем-нибудь скажет...
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
30.07.2008, 14:09 4
А прописать CursorLocation = ClientSide ( как -то иак пишется), и причем если используется объект Connection то у него .....
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 14:58  [ТС] 5
это как?
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
30.07.2008, 15:04 6
Вот так, создаем Connection и Recordset

Set Con = New ADODB.Connection
Con.CursorLocation = adUseClient
Con.Open '--Строка соединения--'

Set rs= New ADODB.Recordset
rs.CursorType = adOpenStatic
rs.ActiveConnection = Con
.......

должно работать
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 15:24  [ТС] 7
делаю:
Dim oConn
Set oConn = Server.CreateObject('ADODB.Connection')
oConn.CursorLocation = 3
oConn.Open g_strConnect

когда вставляю oConn.CursorLocation = 3
начинает ругаться на другие места в программе что типо
Ошибка выполнения Microsoft VBScript (0x800A01CA)
Переменная использует не поддерживаемый в VBScript тип программирования объектов

а в той строчке ';' & oRS('fieldname').value & ';'

если не вставлять oConn.CursorLocation = 3 то не ругается.
???
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 15:27  [ТС] 8
2weld
а как сделать чтобы работали такие конструкции:

Dim oRS As ADODB.Recordset
Set rs= New ADODB.Recordset

а то у меня на такое ругается и я использую
Dim oRS
Set oRS = CreateObject('ADODB.Recordset')

вот... как вообще надо/лучше писать?
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
30.07.2008, 16:05 9
Правильно писать Server.CreateObject(), а первый вариант в VBScript не работает ... проверь корректность и возращаемы данные запроса, может по этому такие ошибки выдавать и пиши всё таки Server.CreateObject()
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 16:33  [ТС] 10
а где первый вариант работает? в VB?

ты имеешь ввиду все обекты создавать Server.CreateObject() ?

почему-то
при вставке oConn.CursorLocation = 3
после выборки из БД в RecordSet ни чего нет, т.е. oRS.EOF дает true
а если без этого, то все нормально выбирается...
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
30.07.2008, 16:44 11
> ты имеешь ввиду все обекты создавать Server.CreateObject() ?
Именно это я и имею ввиду, без Server у тебя вообще ничего не должно работать...
> oRS.EOF дает true
а какая у тебя база, а как с ней соеденяешся, а что пишут в документации по поводу клиентских курсоров ?
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 17:05  [ТС] 12
> без Server у тебя вообще ничего не должно работать...

но работет же CreateObject('ADODB.Recordset')

> а какая у тебя база, а как с ней соеденяешся,
> а что пишут в документации по поводу клиентских курсоров ?

Я выше писал что у меня MySQL+MyODBC 2.5

Set oConn = Server.CreateObject('ADODB.Connection')
'oConn.CursorLocation = 3
oConn.Open 'DRIVER=MySQL;SERVER=127.0.0.1;UID=root;PWD=ATABASE=advert ising'

Set oRS = Server.CreateObject('ADODB.Recordset')
oRS.CursorType = 3
oRS.ActiveConnection = oConn
sSQL = 'Select * from ad_banners'
oRS.Open sSQL

не знаю, что пишут на счет курсоров, т.к. я еще не пойму их смысл.
не надо меня отправлять на msdn, я и так оттуда не вылазию...
просто по русски кратко объясните пожалуйста про курсоры, т.к. с интерпретацией английского языка у меня траблы (я понимаю но плохо...).

например:
Forward-only cursor — allows you to only scroll forward through the Recordset. Additions, changes, or deletions by other users will not be visible. This improves performance in situations where you need to make only a single pass through a Recordset.

т.е. позволяет пройтись по рекордсету только в одну сторону - вперед, то бишь методы возврата типа MoveFirst и MovePrevious не должны работать, так?
изменения в БД, не будут вызывать изменений в рекордсете. (я вообще-то думал что select делается раз и железно и его выборка ни как не может меняться, только если еще раз сделать выборку)
вот....

PS: фак по myodbc - http://www.mysql.com/products/myodbc/faq_toc.html

PPS: извните за тупость, просто раньше ни когда не работал c ADO и ASP вообще...
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
30.07.2008, 17:57 13
Не знаю, я так не страдал, MSSQL Server поприятнее, хотя и подороже...
Если уж юзать MYSQL то хотябы с PHP. Ну да ладно раз испоьзуешь, значит надо..

Изменения в рекордсете - это вызов методов add, del, update

Что касается курсора, честно говоря не зенаю, вот нарыл пару ссылок там есть код(особенно на первой) его можно вставить и посмотреть, что будет ... кстати может у тебя неправильно выставлены настройки драйвера

http://www.mysql.com/products/myodbc/manual.html#MyODBC_With_VB
http://www.devarticles.com/content.php?articleId=50

Конкретннее ничего сказать не могу поскольку с комбинацией MYSQL + ASP никогда не работал...

Надеюсь, что хоть чем-то помог ...
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
30.07.2008, 20:32  [ТС] 14
>Не знаю, я так не страдал, MSSQL Server поприятнее, хотя и подороже...

я с ним ни когда не работал
да и денюжку он стоит, а мускуль фрии.

>Если уж юзать MYSQL то хотябы с PHP. Ну да ладно раз испоьзуешь, значит надо..

да... это точно надо
но не мне, начальство такое хорошее... хотят все нахаляву и чтоб работало и летало... и чтоб все было сделано за два дня

поставил MySQL ODBC 3.51, попробовал через нее, та же фигня ???

первую ссылку я уже видел, сто раз облазил ее...
второе, в принципе уже все это тоже выяснил.

но все равно спасибо за помощь.

вот смотри, вроде все также делаю как и в примере от мускулистых (1 ссылка)
Set oConn = Server.CreateObject('ADODB.Connection')
oConn.Open 'driver={MySQL ODBC 3.51 Driver};server=localhost;port=3306;option=35;uid=root;pwd=;d atabase=advertising'

Set oRS = Server.CreateObject('ADODB.Recordset')
oRS.CursorLocation = 2 'adUseServer
oRS.Open 'SELECT * FROM ad_banners', oConn

Response.Write oRS.RecordCount

а RecordCount все равно -1, а у них видимо все нормально раз они в примере RecordCount приводят...
я уже вообще в ступоре...

ну все я пока временно забью на это, а то целый день ушел.
если у кого-то будут какие-то мысли и предложения пишите плизз.
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
31.07.2008, 12:51 15
Я повторюсь, положение курсора надо указывать не для рекордсета, а для коннекшина. У меня была такая же проблема под SQL Server, когда укзал положение курсора для коннекшион всё заработало... ведь рекордсет !наследует! большинство параметров от коннекшина..
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
31.07.2008, 13:20  [ТС] 16
2weld:
да я уже по всякому пробовал (посмотри выше), а с CursorLocation = adUseClient рекордсет всегда пустой, хоть на конекшн его вешай хоть на рекордсет... ???
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
04.08.2008, 00:09  [ТС] 17
счас заработало...
только не понятно почему (мистика какая-то , все вроде также, но теперь при установке CursorLocation = 3, рекордсет не пуст и есть RecordCount и PageCount
единственные изменения которые произошли, я поставил MDAC 2.6, больше вроде ни чего не делал...

но есть следующая проблема, при CursorLocation = 3, из таблицы почему-то не выбирается автоинкрементируемый ключ id
и при обращении к нему в рекордсете rstTest('id').value
интерпретатор ругается:
'Переменная использует не поддерживаемый в VBScript тип программирования объектов'

вот код:

Set oConn = Server.CreateObject('ADODB.Connection')
oConn.Open 'DRIVER={MySQL ODBC 3.51 Driver};SERVER=127.0.0.1;UID=root;PWD=ATABASE=advertising; OPTION=35'

Set rstTest = Server.CreateObject('ADODB.Recordset')
rstTest.CursorLocation = 3 'adUseClient
rstTest.CursorType = 3
rstTest.Open 'SELECT id,test FROM test', oConn

Response.Write('
' & rstTest.RecordCount & '
')
Response.Write('
' & rstTest('id').value & ' ' & rstTest('test').value & '
')

если же указать CursorLocation = 2, то он на rstTest('id').value не ругается и выводит нормально, но тогда RecordCount равен -1
почему, что за траблы?????
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
04.08.2008, 13:27 18
А у тебя RecordCount > 0?
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 86
04.08.2008, 14:30  [ТС] 19
да RecordCount у меня равен числу выбранных записей.
если устанавливать PageSize, то и PageCount равен действительному числу страниц (при CursorLocation=2 он тоже был -1)
вот...
а куда съелось поле id я не понимаю...???
0
0 / 0 / 0
Регистрация: 29.05.2008
Сообщений: 60
04.08.2008, 15:34 20
Слушай, а попробуй обращаться к полю не по имени, а по индексу.. типа recordset.Fields(i).Value или recordset(i).Value
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2008, 15:34

Проблема с определением типа курсора объекта Recordset
Выдается ошибка Тип ошибки: Microsoft JScript runtime (0x800A1391) 'adOpenDynamic' is undefined...

Вопрос по Recordset.RecordCount
В книге написано, что значение RecordCount RecordSet-а при некоторых 'типах курсора' (не знаю, как...

RecordCount возвращает 1
Ситуация такова, делаю тест с бд access, хочу сделал так что перед началом прохождения в событии...

RecordCount возвращает -1
Доброго дня! И раньше сталкивался с таким но не найдя ничего в гугле делал по другому. Вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.