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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2011, 00:44   #1
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию ADO Обработка данных

Думаю нужная функция если грамотно пользоваться, в основном предназначена для правильно структурированных больших объемов данных
Комментарии и пожелания приветствуются
Код:
Public Function ADO_R_Dmitry(ByVal strSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*Описание функции : Возвращает набор записей Recordset с первой ячейки адреса,
'* указанного диапазона.
'*strSql - Конструкция SQL  запроса.
'* FilePath - Полный путь к файлу включая имя и расширение.
'* OutputRange - адрес ячеки с которой начинается вывод данных.
'* FieldsName - используются или нет заголовки столбцов (True - False)
'* OutputFieldsName - вывод данных с заголовками или без (True - False), _
'* если FieldsName=False, заголовки не выводятся.
'==============================================================================
'* Автор R Dmitry (Дмитрий Русак dg_rusak@mail.ru skype: RDG_Dmitry)          |
'* WM:_R269866874234 U144446690328                                            |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case CLng(Split(Application.Version, ".")(0))
    Case Is < 12
        sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
          & ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
    Case Is >= 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
        & ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(strSql)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i = 0 To rs.Fields.Count - 1
    OutputRange.Offset(0, i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset(1, 0)
 End If
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
пример использования

Код:
Sub Test()
'пример использования
strSql2 = "SELECT * FROM [Лист1$]"
Call ADO_R_Dmitry(strSql2, ThisWorkbook.FullName, Sheets(2).[a1], True, True)
Sheets(2).Activate
End Sub
Вложения
Тип файла: zip ADO_R_Dmitry.zip (15.1 Кб, 53 просмотров)
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 21.07.2011, 10:53   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Все верно. Много вопросов по обработке таблиц в 500000 строк(и больше), да еще и циклы туда прикручивают. SQL запрос тут на порядок технологичней, быстрей. И памяти меньше ест и процессор меньше грузит. Я уже писал где-то, что ИМХО разработчики погорячились, сделав 1000000 строк и 16000 столбцов в табличном процессоре. Такие задачи для СУБД.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 21.07.2011, 12:06   #3
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Все верно. Много вопросов по обработке таблиц в 500000 строк(и больше), да еще и циклы туда прикручивают. SQL запрос тут на порядок технологичней, быстрей. И памяти меньше ест и процессор меньше грузит. Я уже писал где-то, что ИМХО разработчики погорячились, сделав 1000000 строк и 16000 столбцов в табличном процессоре. Такие задачи для СУБД.
я по мере возможности постараюсь еще и набросать основных запросов

Уникальные, группировки, трансформация, подтягиваение данных и т.д.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 21.07.2011, 12:50   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Было бы замечательно. И сюда бы неплохо:
http://www.excelworld.ru/forum/3
Я сам ленив все это оформлять, мне частенько Alex_ST в этом помогает(дай ему Бог здоровья):-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 21.07.2011 в 12:52.
kuklp вне форума Ответить с цитированием
Старый 22.07.2011, 10:57   #5
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Было бы замечательно. И сюда бы неплохо:
http://www.excelworld.ru/forum/3
Я сам ленив все это оформлять, мне частенько Alex_ST в этом помогает(дай ему Бог здоровья):-)

Сергей этож регистрироваться надо , как нибудь доберусь
---------------------------------
Набросал пару запросов
Из списка выбираем запрос и жмем кнопку

Выбор произвольных столбцов
группировка по отделам
группировка по отделам и датам
группировка по отделам и датам + сортировка
продажи по дням
продажи по месяцам
ps////////
по мере наличия времени буду образцы добавлять, если кому нужен сложный запрос, пишите в почту или скайп
зы........ в скором времени добавлю импорт из других типов файлов и баз данных
Вложения
Тип файла: zip ADO_R_Dmitry.zip (18.6 Кб, 91 просмотров)
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базы данных изменение данных (Delphi (ADO)). RuthlessD Помощь студентам 0 16.06.2011 19:57
Обработка запрсов содержащих скобки для ADO.Query sergey113 Помощь студентам 1 26.05.2011 12:37
Обновление данных в ADO.NET Abbath1349 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 21.05.2011 13:29
Выборка данных в БД (ADO) Makoto2005 БД в Delphi 2 01.06.2010 15:42
Выборка данных в БД (ADO) Makoto2005 БД в Delphi 0 01.06.2010 13:38