Как извлечь номер текущей записи из Recordset

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Как извлечь номер текущей записи из Recordset

Сообщение AHTOXA » 06.05.2003 (Вт) 15:06

Проблема такая:
1) нужно узнать номер текущей записи (в recordset не нашел ни метода, ни свойства, которое бы за это отвечало)?
2) как добавить запись в, чтобы она помещалась не в конец recordset, а на определенную позицию?
Bandit

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Re: Как извлечь номер текущей записи из Recordset

Сообщение skiperski » 06.05.2003 (Вт) 15:13

AHTOXA писал(а):1) нужно узнать номер текущей записи (в recordset не нашел ни метода, ни свойства, которое бы за это отвечало)?

rs.AbsolutePosition

AHTOXA писал(а):2) как добавить запись в, чтобы она помещалась не в конец recordset, а на определенную позицию?

По-моему, так не сделать. Но можно попробовать после добавления записи вызывать метод Requery.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.05.2003 (Вт) 15:14

1. RecordSet.AbsolutePosition

2. RecordSet.AbsolutePosition = номер записи после которой надо что то вставить

Recordset.AddNew

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 15:15

Спасибо за ответ
Bandit

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 15:40

recordset.AbsolutePosition = adPosUnknown и че с этим делать. Да и recordset.RecordCount = -1, может когда открываешь RecordSet надо какие-то параметры указать (у меня открывается так:

rs.Open "select * from MeterReadings Order By DateReg, TimeReg", SQLCON, adOpenDynamic, adLockOptimistic

)?
Bandit

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2003 (Вт) 15:47

Открывай, как Dynaset
Да, и если юзаешь SQL-сервер, то вначале установи курсор CursorLocation=adUseClient
У меня работает такой код:
Код: Выделить всё
rs.CursorLocation = adUseClient
rs.Open SQL, cnn, adOpenStatic, adLockReadOnly
Lasciate ogni speranza, voi ch'entrate.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 16:39

А если надо вставить запись перед 1 записью?
Bandit

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2003 (Вт) 16:51

Это ведь не грид, а база данных.
Копируешь таблицу в буфер, очищаешь таблицу, вставляешь первую строку, вставляешь остальные строки из буфера.
А зачем? В БД никогда не стоит ссылаться на позицию записи в таблице. Если тебе надо использовать ссылку на строку, используй ключи.
Lasciate ogni speranza, voi ch'entrate.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 16:57

Мне это нужно для организации бинарного поиска по Таблице.
Bandit

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 17:28

так не пашет, вылетает с ошибкой "Object required":

RecordSet.AbsolutePosition = номер записи после которой надо что то вставить
Recordset.AddNew
Bandit

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.05.2003 (Вт) 17:30

Ответь мне честно, ты вообще понимаешь ЧТО ты пишешь? Ну то есть в плане как бы это сказать, давно ли ты программируешь?

Потому что странно как то мне кажется, что ты не можешь понять что означает данная ошибка, это раз.



А два - надо понимать что под recordset имелось в виду поставленное для примера имя объекта. Его надо было заменить именем твоего рекордсета. То есть тем, который ты реально используешь.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 17:46

Отвечаю:
На бейсике программирую 2 недели, а так 2 года.
(Ответь мне честно, ты вообще понимаешь ЧТО ты пишешь? Ну то есть в плане как бы это сказать, давно ли ты программируешь?)

Ну облажался, с кем не бывает, но это чисто по невнимательности :oops:
из буфера вставил RecordSet.AbsolutePosition вместо того чтобы ручками написать - rs.AbsolutePosition
(А два - надо понимать что под recordset имелось в виду поставленное для примера имя объекта. Его надо было заменить именем твоего рекордсета. То есть тем, который ты реально используешь.)

А после вызова метода rs.AddNew, курсор автоматом перемещается на последнюю позицию.
Bandit

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 06.05.2003 (Вт) 18:17

Разобрался как сделать, надо после открытия recordset написать
recordset.Sort = "....", и тогда запись будет добавлятся в соответсвии с сортировкой.
Bandit

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.05.2003 (Ср) 8:51

Ну не врубаюсь я... Ты делаешь бинарный поиск? Во-первых, тебе совершенно не нужно AbsolutePosition, достаточно RecordCount, делаешь .MoveFirst и .MoveNext RecordCount/2.
А во-вторых, ЗАЧЕМ?! Создаешь индекс и метод Seek найдет данных гораздо быстрее, чем твой самопальный бинарный поиск, поскольку: (1) он реализован в движке и (2) написан грамотно и без ошибок.

Разобрался как сделать, надо после открытия recordset написать recordset.Sort = "....", и тогда запись будет добавлятся в соответсвии с сортировкой.

Чушь. Запись всегда добавляется в конец таблицы. Просто после .Sort набор данных будет отсортирован.
Lasciate ogni speranza, voi ch'entrate.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 07.05.2003 (Ср) 9:36

Да, я сделал бинарный поиск. И если бы можно было вставлять запись на любую позицию, то его скорость была бы на уровне встроенного поиска (по индексу он ведь тоже ищет с помощью бинарного поиска).
Да и написан он у меня грамотно и без ошибок.
В цикле я использовал .Move pos, а .AbsolutePosition мне нужен был для того чтобы вставлять запись куда угодно, но как я уже понял добавление возможно только в конец таблицы, так что я не использую .AbsolutePosition.

А если индекса нет и не предполагается чтобы он был?

А с тем что после добавления новой записи список будет отсортирован, полностью с тобой согласен(в общем-то я это и имел в виду - "в соответствии с сортировкой").

Метод Seek я так понял применяется для поиска данных в файле, причем тут поиск по базе данных?
Bandit

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.05.2003 (Ср) 16:31

Метод Seek используется для поиска по индексированным полям, пример его использования: rs.Seek "=", Value1, Value2
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 266

    TopList