Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать количество строк в запросе VBA.
 
 автор: DRAK0N   (02.12.2014 в 09:20)   личное сообщение
 
 

Всем привет.
Подключаю базу access к word.
Столкнулся с такой проблемой.
Как узнать количество строк данных подгружаемых из запроса, чтобы отобразить их на одном листе
конструкция такого вида ругается с ошибкой 3078 что не удалось найти входящую таблицу или запрос(в моем случае запрос), хотя парой строк ранее подключение к базе с этим запросом прошло успешно и в ворде это видно.

Set rst = CurrentDb.OpenRecordset("Select * From 'Запрос1'") 

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

  Ответить  
 
 автор: Alex   (02.12.2014 в 09:41)   личное сообщение
 
 

Аргументы: strQuery - название сохраненного запроса или SQL запроса.
Назначение: Получить количество строк возвращаемое запросом или SQL выражением
Возвращает: Количество строк в запросе

Public Function QRCount(strQuery As String) As Long
Dim rst As Recordset

Set rst = CurrentDb.OpenRecordset(strQuery)
rst.MoveLast
QRCount = rst.RecordCount
rst.Close
End Function

  Ответить  
 
 автор: DRAK0N   (02.12.2014 в 12:59)   личное сообщение
 
 

Хм что-то не пойму что делаю не так. Снова валится с ошибкой 3078 "" на строке Set rst = CurrentDb.OpenRecordset(SQLStatement), а подключение к базе проходит нормально...

Public Function QRCount(SQLStatement As String) As Long
Dim rst As Recordset
'''SQLStatement = "Select * From 'Запрос1'"
Set rst = CurrentDb.OpenRecordset(SQLStatement)
rst.MoveLast
QRCount = rst.RecordCount
rst.Close
End Function
Sub main()
MsgBox QRCount("Select * From 'Запрос1'")
Dim MyCounter As Integer
        ActiveDocument.MailMerge.OpenDataSource Name:=ActiveDocument.Path & "\Склад.accdb" _
        , SQLStatement:="SELECT * FROM 'Запрос1'", SQLStatement1:="", _
        SubType:=wdMergeSubTypeAccess
...
End Sub

  Ответить  
 
 автор: час   (02.12.2014 в 13:44)   личное сообщение
 
 

попробуй предварительно создать нужный запрос, назови его SQLStatement

И справь строку
Set rst = CurrentDb.OpenRecordset(SQLStatement)
на
Set rst = CurrentDb.OpenRecordset("SQLStatement")

  Ответить  
 
 автор: DRAK0N   (02.12.2014 в 14:14)   личное сообщение
 
 

Так у меня 100% есть запрос с названием Запрос1 при подключении базы он выполняется. и я пробовал заменять переменную на запрос та же ошибка, так же пробовал использование различных типов кавычек и скобок свойственных запросам sql.

  Ответить  
 
 автор: час   (02.12.2014 в 16:19)   личное сообщение
 
 

ну хотя бы
раскомментируй строку
'''SQLStatement = "Select * From [Запрос1]"

создай типа переменную строковую
dim SQLStatement

  Ответить  
 
 автор: час   (02.12.2014 в 16:22)   личное сообщение
 
 

или так

Set rst = CurrentDb.OpenRecordset("Запрос1")

  Ответить  
 
 автор: kot_k_k   (02.12.2014 в 21:04)   личное сообщение
 
 


Как узнать количество строк данных подгружаемых из запроса, чтобы отобразить их на одном листе



а лист верда резиновый???
если есть готовый запрос - то кол-во получим вот так

Set rst = CurrentDb.OpenRecordset("Select  count(*) From Запрос1 group by Запос1.Поле1")

  Ответить  
 
 автор: Дядя Федор   (03.12.2014 в 08:42)   личное сообщение
 
 

dcount("*","Запрос1")

  Ответить  
 
 автор: DRAK0N   (03.12.2014 в 10:03)   личное сообщение
 
 

Всем спасибо. Заработало.
В итоге для полной работоспособности предложенного решения от Alex не хватало

Dim rst As DAO.Recordset 

Возможно достаточно было подключить какую-то библиотеку, но я не знаю какую именно.

По поводу закоменченой строки

'''SQLStatement = "Select * From 'Запрос1'" 

при подключении базы к ворду используется тоже имя переменной, так что запрос в ней уже есть и эта строка тут не нужна вовсе, потому и закоменчена.

По поводу резиновости листа. в запросе не более 20ти позиций так что в этом плане все нормально)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList