2015-12-23 4 views
-1

Access 2013 32 бит/Windows 7 64 BitVBA - Перебор отфильтрованной таблицы доступа

У меня есть таблица ключей и на основе значения ключа мой VBA будет работать несколько запросов и заполнить другие поля в таблице - Я называю это «Проверка». У меня есть столбец «Проверено» в таблице и приходится прерывать обработку этого списка в несколько партий (и больше записей постоянно добавляются), поэтому я хочу отфильтровать «Проверенные». Я хотел бы сделать это без с помощью отдельного запроса

Я использую традиционный цикл ж/условие: (Мой код работает это только макете игнорировать синтаксис здесь, пожалуйста)

Move First 
Do Until EOF 
if Table("Checked") = "True" Then goto NextRow 
    <Code> 
NextRow: 
    Move Next 
Loop 

Я хотел бы продолжить с этим методом, но отфильтровать все "Checked" = True на начале

+0

Вы пытались создать запрос с 'Проверено = "True"' критерии? – Crowcoder

+0

Я думал об этом - это то, что я собираюсь сделать, если нет опции фильтра, но в идеале я просто отфильтровываю данные. – Schalton

+1

'RecordSet' имеет свойство' Filter', но я довольно уверен, что более эффективно использовать оператор sql с предложением WHERE. – Crowcoder

ответ

1

Просто откройте записи с запросом, который имеет ИНЕК.

Dim rs As Recordset 
Dim S As String 

S = "SELECT foo, morefoo FROM bar WHERE [Checked] = 0" 
' Or if Checked is a Text column: 
S = "SELECT foo, morefoo FROM bar WHERE [Checked] <> 'True'" 

Set rs = CurrentDb.OpenRecordset(S) 
Do While Not rs.EOF 
    ' code 

    rs.MoveNext 
Loop 

(BTW, ваш Move First внутри цикла будет создавать бесконечный цикл ...)

+0

Да, моя ошибка с первым движением внутри - я выбрасывал концепцию. Я в идеале не хочу убегать от запроса - этот пост требует альтернативы этому - я очищу вопрос, чтобы отразить и прояснить эту цель. Спасибо – Schalton

+0

@ Шальтон: Извините, но это не имеет большого смысла. Вы должны отфильтровать записи либо с помощью набора записей (с помощью предложения WHERE, см. Мой ответ), либо в цикле (см. Ваш вопрос). Другого пути нет. – Andre

+1

Он может открыть набор записей ADO, а затем установить его свойство 'Filter'. Это работает, как я думаю, он намеревается. Но я не понимаю, почему имеет смысл делать это именно так. Должно быть более эффективно загружать только целевые строки в первую очередь - как вы предположили. – HansUp

Смежные вопросы