|
|
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
Может быть кто-нибудь поможет советом... Работаю с SQL Server mobile через OLE DB. Есть задача позиционироваться на определенную запись в уже имеющемся rowset'е по условию "столбец" = "значение". Каким образом можно решить эту задачу, не прибегая к перебору всех строк в rowset'е? Всем заранее спасибо за любую помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 17:27 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
Если набор данных отсортирован по твоему столбцу, можно например применить бинарный поиск. Но это тебе надо делать самому, в смысле поиск писать и искать. OLE DB здесь не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 23:40 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
Нет, в общем случае не отсортирован. Может быть можно как-то отфильтровать уже готовый rowset по условию? Или может быть у записи в таблице имеется какой-нибудь уникальный идентификатор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 12:43 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
насколько знаю RowSet - это COM со своими методами. Что там нет такой процедуры поиска? ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 13:19 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
Да, грубо говоря, это набор интерфейсов. В спецификации есть интерфейс IRowsetFind, с помощью которого можно делать поиск в полученной выборке. Но провайдеры данных не обязаны его поддерживать. И у данного провайдера этот интерфейс как раз не поддерживается. Вот приходится придумывать - как найти нужную строку, не прибегая к перебору всех записей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 14:14 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
- заставить это сделать сервер отдельным запросом/ХП ----> с получением id/№/.... ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 14:33 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
Да, но задачу надо решать в общем случае, когда структура таблицы не известна. Допустим, я найду некий ID записи отдельным запросом. Но как этот ID использовать дальше, для позиционирования в исходной выборке? Хорошо было бы, если бы в таблице имелся некий уникальный идентификатор записи... В rowset имеются закладки, но они, к сожалению, уникальны только в пределах этой выборки. Может быть можно как-то отфильтровать записи в rowset, чтобы видны были только удовлетворяющие условию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 14:51 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
низзяя...... - выборка - это моментальный снимок БД. И будет неправильно как то искать кроме перебора " уникального снимка". Кроме того, сами данные-снимок могут быть не у провайдера а у БД. И "гнаться" на клиента только когда у провайдера будет Код: plaintext 1. ЗЫ. Фильтр должен не провайдер делать а клиент. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 15:13 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
По-вашему получается, что выход один - перебор всех записей? А как же тогда работают метод Find и свойство Filter ADO? ADO ведь использует те же самые интерфейсы OLE DB... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 15:33 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
не понимаю, ты свой провайдер пишешь что ли? Да у провайдера ADO от MS есть методы поиска, но как он это делает большой вопрос: http://hghltd.yandex.com/yandbtm?url=http%3A//www.script-coding.info/ADO.html&text=Criteria&reqtext=%28Find%3A%3A10020+%26/%280+0%29+!%25Find%3A%3A34916+%26%26+OLE%3A%3A287552%29+%26%26+Criteria%3A%3A2144545&dsn=467&d=3463327 Find(Criteria, SkipRows, SearchDirection, Start) Ищет в Recordset строку, которая удовлетворяет указанным критериям. Если строка найдена, она становится текущей. Иначе, текущая позиция устанавливается на конец (или начало) Recordset. Перед вызовом метода текущая позиция должна быть установлена. Параметры: Criteria - строка, которая содержит инструкцию, определяющую имя столбца, оператор сравнения и значение. Может быть определено имя только единственного столбца. Оператором сравнения может быть <, >, =, <=, >=, <> или "like". Значение может быть строкой, числом с плавающей запятой или датой. Cтроки берутся в одинарные кавычки или # (знаки номера). Даты ограничиваются знаками номера и могут содержать часы, минуты и секунды, но не миллисекунды. Для оператора "like" значение строки может содержать звездочку (*). Звездочка может использоваться только в конце строки значения, или в начале и конце строки одновременно, и никак иначе. Пример: "start_date > #7/22/97#". SkipRows - необязательный. Целое число (long), значение по умолчанию которого является нулевым, которое определяет смещение строки от текущей строки или закладки Start (см. ниже), чтобы начать поиск. По умолчанию, поиск начнётся с текущей строки. SearchDirection - необязательный. Определяет направление поиска. Возможные значения: adSearchBackward(-1) - Поиск назад. Если соответствие не найдено, указатель текущей записи будет установлен в BOF. adSearchForward(1) - Поиск вперёд. Если соответствие не найдено, указатель текущей записи будет установлен в EOF. Start - необязательный. Закладка (Bookmark), которая используется как начальная позиция для поиска. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 16:11 |
|
||
|
поиск строк в rowset'е
|
|||
|---|---|---|---|
|
#18+
Нет, я пишу consumer для провайдера данных SQL server mobile. А ADO - это не провайдер. Это всего лишь надстройка над OLE DB, сделанная в основном для того, чтобы OLE DB могли юзать клиенты, использующие диспетчерские интерфейсы (типа VB, VBA). Вот и мне интересно как в ADO реализован Find и Filter... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33578151&tid=2031842]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 419ms |

| 0 / 0 |
