Access: несколько вопросов

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Access: несколько вопросов

Сообщение alibek » 07.07.2003 (Пн) 9:37

Привет все, форумцы :)

Давненько в Access ничего не делал и выяснил, что он теперь переехал на ADO и теперь есть несколько вопросов.

Поскольку я редко использую поля, связанные с полями БД, то обычно я создаю Recordset и юзаю его. Раньше было просто: CurrentDb.OpenRecordset(), но это работает только при использовании DAO. В ADO Recordset тоже можно объявить, но пока нашел как, столько времени потерял :) CurrentProject.ActiveConnection (или что-то похожее)

Но теперь появилось несколько вопросов.

Первое и основное: поиск.
В DAO можно было делать компактно и изящно:
rs.Index = ...
rs.Seek "=", ...
If rs.NoMath Then ...

В ADO метод Seek есть, но Jet4 его не поддерживает. Есть метод .Find, но: (1) я не уверен, что этот метод использует индексы и (2) допускается поиск только по одному полю. Есть более универсальный способ - делать выборку через SQL или фильтры, но уж слишком медленно.
Для чего это нужно? К примеру в таблице есть комбинация полей TYPE,NAME, которая должно быть уникальным. Значит надо перед сохранением записи поискать в таблице другие записи с такой же комбинацией. Find использовать не получится, а делать выборку при каждом сохранении -- это долго (особенно если учесть, что записей может быть много). В этой таблице имеется индекс TYPENAME(TYPE,NAME), могу ли я его как-то использовать?

Заранее спасибо за полные и исчерпывающие ответы :)
Lasciate ogni speranza, voi ch'entrate.

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 13.07.2003 (Вс) 4:58

Во-первых, в ADO Seek работает не при всех CursorType. А проверить работоспобность этого метода можно при помощи метода Support().
Во-вторых, запрос можно сформировать и так:
SELECT *, TYPE + NAME AS TypeName FROM ...
Тогда Find "TypeName = '" & sType & sName & ''" должна работать.

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

Сообщение alibek » 14.07.2003 (Пн) 10:08

Объединение не всегда подойдет, например если оба поля числовые, то придется вставлять разделитель, иначе "1234" найдет и "1", "234" и "12", "34" и "123", "4".
А про Seek я и имел ввиду, для провайдера Jet.4 он не работает ни для каких CursorType.
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList  
cron