Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2016, 21:29   #1
Bregra
 
Регистрация: 20.12.2015
Сообщений: 7
По умолчанию Выбор данных из access в excel

Здравствуйте,

Подскажите, пожалуйста, как решить задачу. Нужно из таблицы в access выбрать данные по определенным условиям и вставить их в определенные ячейки в excel. Данных, которые нужно выбрать очень много, поэтому хотелось бы записать данные в рекордсет и потом через него выбирать данные по критериям.

connDB.ConnectionString = "Provider=Microsoft.ace.oledb.12.0; data source=" & Path
connDB.Open
Set rs = connDB.Execute("Select * from " & Table)
Range("A1").CopyFromRecordset rs

Подскажите, можно ли вместо CopyFromRecordset написать условия, по которым будут выбираться данные и вставлять в определенные ячейки в excel?Спасибо
Bregra вне форума Ответить с цитированием
Старый 14.02.2016, 22:29   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Какой ответ Вы хотите получить на свой "не совсем сформулированный" вопрос?
Цитата:
поэтому хотелось бы записать данные в рекордсет
Цитата:
можно ли вместо CopyFromRecordset написать условия
ответ будет такой-же: можно, наверное, смотря какие данные по каких условиях.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 15.02.2016, 01:31   #3
Bregra
 
Регистрация: 20.12.2015
Сообщений: 7
По умолчанию

В Recordset будет скопировано таблица из access, состоящая из 5 столбцов, 4 столбца это условия а 5 столбец значение. Условия будут записаны в ячейки в excel. Например A1="Условие1", B2="Условие2", U1="Условие3", S9="Условие4". Нужно в макросе написать что если столбец1 в рекордсет равен ячейки А1 и столбец2 в рекордсет равен ячейки B2 и столбец 3 в рекродсет равен U1 и т. д., то в ячейку В1 выводится значение из столбца 5 в рекордсете. И таких значений, которые нужно будет получить будет 150 Спасибо.
Bregra вне форума Ответить с цитированием
Старый 15.02.2016, 09:59   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Уже светлее. Осталось только прикрепить архив с базой таблицы и ексель куда должно вставляться, и 2-3 примера что должно получиться, и можно что-то думать
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 16.02.2016, 09:09   #5
Bregra
 
Регистрация: 20.12.2015
Сообщений: 7
По умолчанию

Во вложении в access таблица в ней 4 условия и значение которое нужно получить. В excel файле на 1 листе разбросаны условия по которым нужно в ячейку B1 вывести значение. Если делать через select

cn.ConnectionString = "Provider=microsoft.ace.oledb.1 2.0; data source=" & Path
cn.Open
A = "select sum([myValue]) from Table where ([Condition1]= "A2" and [Condition2]= "B2" and [Condition3]= "C1" and [Condition4]= "D2" )"
Cells(1,2) = cn.Execute(A).GetString

То так как значений которые нужно получить 150, то операция выполняется долго. Можно ли, например, как то загнать все данные в recordset и из него уже по условиям выбирать данные.
Нужно получилить значение в ячейку В1 по условиям, что Condition1=A2, Condition2=B2, Condition3=C1, Condition4=D2. Предполагается, что условия по которым будет выбираться значение будет выполняться через цикл. Спасибо.
Вложения
Тип файла: zip Table1.zip (25.4 Кб, 16 просмотров)

Последний раз редактировалось Bregra; 16.02.2016 в 09:13.
Bregra вне форума Ответить с цитированием
Старый 18.02.2016, 09:53   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Согласно заданию с екселя и данных таблицы, код похожий на Ваш
Код:
Public Sub test_db()
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ActiveWorkbook.Path & "\Table.accdb; Jet OLEDB:Database;"
    Dim con As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim sSql As String
    Dim sht 'As Worksheets
    con.Open connectionString
    On Error GoTo errLabel
    Set sht = Sheets(1)
    sSql = "Select sum(Value1) FROM Table1 WHERE (" & _
            "Condition1='" & sht.Range("B5") & "' and " & _
            "Condition2='" & sht.Range("G1") & "' and " & _
            "Condition3='" & sht.Range("K1") & "' and " & _
            "Condition4='" & sht.Range("N1") & "');"
    Debug.Print sSql
    rst.Open sSql, con
    If Not rst.EOF Then
        sht.Range("B1") = rst.Fields(0).Value
    Else
        MsgBox ("NO DATA")
    End If
    con.Close
    Exit Sub
errLabel:
    con.Close
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 18.02.2016, 17:51   #7
Bregra
 
Регистрация: 20.12.2015
Сообщений: 7
По умолчанию

Спасибо. А скажи, пожалуйста, если я
"Condition1='" & sht.Range("B5") & "' and " & _
"Condition2='" & sht.Range("G1") & "' and " & _
"Condition3='" & sht.Range("K1") & "' and " & _
"Condition4='" & sht.Range("N1") & "');"
сделаю через цикл, в вашем коде, он каждый раз будет открывать базу данных и искать нужное значение? Я вопрос к тому задаю, что если он будет каждый раз обращаться к базе данных, то процесс будет очень долгим, потому что нужно выгрузить очень много данных
Bregra вне форума Ответить с цитированием
Старый 18.02.2016, 20:13   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Я не знаю.Ну набей какую-то тестовую таблицу, запустим в цикле и посмотрим что получается? Зачем думать как будет, быстро-медленно, если можно попробовать?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.02.2016, 17:27   #9
Bregra
 
Регистрация: 20.12.2015
Сообщений: 7
По умолчанию

Cпасибо. Я попытался изменить код, во вложении пример, и сделать цикл, но почему то, он находит только первое значение, которое нужно найти, потом все время его использует. А во вторых, он вроде бы все время обращается к базе когда ищет значение. А если если база большая, и таблица к которой он обращается это запрос, состоящий из многих запросов, то такой цикл будет торомозить. Подскажите, пожалуйста, почему в вашем измененном коде, макрос находит только первое значение, другие значения он потом не ищет. Спасбио.


Public Sub test_db()
connectionString = "Provider=Microsoft.ACE.OLEDB.1 2.0; Data Source=" & ActiveWorkbook.Path & "\Table.accdb; Jet OLEDB:Database;"
Dim con As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sSql As String
Dim sht As Worksheets
con.Open connectionString
On Error GoTo errLabel
For i = 1 To 24
A = Sheets("Sheet1").Cells(4 + i, 1)
For i1 = 1 To 24
B = Sheets("Sheet1").Cells(4, 1 + i1)
sSql = "Select sum(Value1) FROM Table1 WHERE (" & _
"Condition1='" & A & "' and " & _
"Condition2='" & B & "' and " & _
"Condition3='" & Sheets("Sheet1").Range("K1") & "' and " & _
"Condition4='" & Sheets("Sheet1").Range("N1") & "');"
rst.Open sSql, con
If Not rst.EOF Then
Sheets("Sheet1").Cells(4 + i, 1 + i1) = rst.Fields(0).Value
End If
Next
Next
con.Close
Exit Sub
errLabel:
Resume Next
End Sub
Вложения
Тип файла: zip Проверка.zip (34.4 Кб, 14 просмотров)
Bregra вне форума Ответить с цитированием
Старый 20.02.2016, 18:08   #10
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Код:
rst.MoveNext
???
Андрэич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в access из excel palazzio Microsoft Office Access 5 20.11.2013 08:31
Выбор данных из таблицы в форму (VBA+EXCEL) MadStyle Помощь студентам 6 04.11.2013 23:00
Загрузка данных из Excel в Access Zorg Microsoft Office Excel 12 02.08.2012 18:25
Импорт данных из Excel в Access alexvav БД в Delphi 2 22.06.2012 16:17
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38