2016-06-22 4 views
1

Первоначальный плакат, наконец, у меня возник вопрос, что я не мог найти ответ здесь.vba store recordset как целочисленная переменная

У меня есть запрос MS Access, который возвращает 1 результат (который является числом), который я хочу сохранить как целочисленную переменную (x), поэтому я могу использовать ее позже для цикла. Проблема в том, что, поскольку я использую его как набор записей, а переменная является целым числом, я получаю сообщение об ошибке «Тип несоответствия».

Прямо сейчас я просто хранить результат в ячейке и устанавливая переменную равной ячейки:

Ws.Range("A1") = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1) 

x = Ws.Range("A1") 

Ws.Range("A1").Delete 

А потом я просто цикл, который работает х раз:

For i = 0 To x 

в принципе, я просто хочу, чтобы иметь некоторый код, который выглядит следующим образом:

x = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1) 

Любая помощь здесь будет огромной. Спасибо!

+0

У меня нет ничего, чтобы проверить это, но существует ли свойство '.Value' для метода' .GetRows'? Или как насчет 'x = CInt (LBound (Db.OpenRecordset (" SELECT COUNT (Asset_Name) FROM Assets WHERE Active = True "). GetRows (1)))' –

+0

Когда я добавляю '.value' до конца инструкции в make: 'x = Db.OpenRecordset (« SELECT COUNT (Asset_Name) FROM Assets WHERE Active = True »). GetRows (1) .Value' Я получаю сообщение об ошибке« Object Required ». –

+0

Подождите, неправильно прочитайте ваше заявление. Ваш код не является ошибкой, но он возвращает x как ноль. Но это все еще прогресс. –

ответ

1

Следующая должно дать вам правильный результат:

Dim x As Integer 
Dim db As DAO.Recordset 

db.MoveFirst 
If IsNumeric(db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").Fields(0).Value) Then 
    x = CInt(db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").Fields(0).Value) 
Else 
    MsgBox "The query did not return a number." & Chr(10) & "Aborting..." 
End If 

Обратите внимание, что вы используете DAO и не ADO как ваши оригинальные метки на пост указанного. Тем не менее, они оба ведут себя довольно схожими, и курсор обычно находится в первой строке (когда данные возвращаются). Таким образом, MoveFirst не требуется. Тем не менее, Microsoft сама по-прежнему использует его в своем собственном примере кода. Первый столбец, если для DAO и ADO одинаковый .Fields(0).

+0

PERFECT! Рань как шарм. Большое спасибо, включая изменение тега –

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