Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ADO - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
ADO
maradona Дата: Среда, 23.10.2013, 11:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Всем привет. Используя класс предложенный Nerv'ом для написания запросов к к файлам excel столкнулся с тем, что запросы ведут себя по разному на разных машинах. Если на моей все работает , то на других выгружается только Select*, а всевозможные where и join - конструкции не работают. Возможно проблема в драйверах, ADO, каких-либо других различиях на машинах. Спасибо. Прилагаю ссылку на класс, http://www.excelworld.ru/forum/3-4357-1
 
Ответить
СообщениеВсем привет. Используя класс предложенный Nerv'ом для написания запросов к к файлам excel столкнулся с тем, что запросы ведут себя по разному на разных машинах. Если на моей все работает , то на других выгружается только Select*, а всевозможные where и join - конструкции не работают. Возможно проблема в драйверах, ADO, каких-либо других различиях на машинах. Спасибо. Прилагаю ссылку на класс, http://www.excelworld.ru/forum/3-4357-1

Автор - maradona
Дата добавления - 23.10.2013 в 11:05
PowerBoy Дата: Среда, 23.10.2013, 11:17 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Привели бы примеры запросов, которые не работают.


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
СообщениеПривели бы примеры запросов, которые не работают.

Автор - PowerBoy
Дата добавления - 23.10.2013 в 11:17
maradona Дата: Среда, 23.10.2013, 11:34 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
[vba]
Код
Dim ADOQ As New ADO
Dim ADOR As New ADO

For Each FileItem In SourceFolder.Files

ActiveWBK.Sheets.Add.Name = "Goods" ' создаем буферный лист
openxlsb = FileItem.Path ' путь к внешнему файлу xlsx

ADOR.DataSource = openxlsb ' подключаемся к файлу
ADOR.Query ("SELECT F1*1, F9, F11, F26, F45, F85, F86, F94, F96, F146, F168, F169, F2, F6, F10, F12 FROM [Goods$] where f5 between '1' and '5';")
ActiveWBK.Sheets("Goods").Range("A1").CopyFromRecordset ADOR.Recordset ' выгружаем данные в активную книгу
ADOR.Disconnect

' запрос к данным активной книги к листам Goods и Promo_Act
ADOQ.Query ("SELECT [Goods$].F1, [Goods$].F4, [Goods$].F5, [Goods$].F12 FROM [Promo_Act$A4:A] LEFT JOIN [Goods$] ON [Promo_Act$A4:A].F1 =[Goods$].F1;")
[/vba]
последний запрос и не работает на других машинах, хотя эксель везде 2007 стоит. Все больше меня посещает мысль что дело в coonectionstring или в чем то еще связанным с СУБД. Но я в этом не силен и в классе предложенным выше, разобраться никак не могу.
[admin]
Оформляйте коды тегами![/admin]
[moder]С каких это пор АДО у нас относится к Excel, а не к макросам?
Тему переношу
 
Ответить
Сообщение[vba]
Код
Dim ADOQ As New ADO
Dim ADOR As New ADO

For Each FileItem In SourceFolder.Files

ActiveWBK.Sheets.Add.Name = "Goods" ' создаем буферный лист
openxlsb = FileItem.Path ' путь к внешнему файлу xlsx

ADOR.DataSource = openxlsb ' подключаемся к файлу
ADOR.Query ("SELECT F1*1, F9, F11, F26, F45, F85, F86, F94, F96, F146, F168, F169, F2, F6, F10, F12 FROM [Goods$] where f5 between '1' and '5';")
ActiveWBK.Sheets("Goods").Range("A1").CopyFromRecordset ADOR.Recordset ' выгружаем данные в активную книгу
ADOR.Disconnect

' запрос к данным активной книги к листам Goods и Promo_Act
ADOQ.Query ("SELECT [Goods$].F1, [Goods$].F4, [Goods$].F5, [Goods$].F12 FROM [Promo_Act$A4:A] LEFT JOIN [Goods$] ON [Promo_Act$A4:A].F1 =[Goods$].F1;")
[/vba]
последний запрос и не работает на других машинах, хотя эксель везде 2007 стоит. Все больше меня посещает мысль что дело в coonectionstring или в чем то еще связанным с СУБД. Но я в этом не силен и в классе предложенным выше, разобраться никак не могу.
[admin]
Оформляйте коды тегами![/admin]
[moder]С каких это пор АДО у нас относится к Excel, а не к макросам?
Тему переношу

Автор - maradona
Дата добавления - 23.10.2013 в 11:34
PowerBoy Дата: Среда, 23.10.2013, 12:55 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Попробуй установить Microsoft Access Database Engine 2010 Redistributable.

Его можно установить отсюда: http://www.microsoft.com/en-us....d=13255


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
СообщениеПопробуй установить Microsoft Access Database Engine 2010 Redistributable.

Его можно установить отсюда: http://www.microsoft.com/en-us....d=13255

Автор - PowerBoy
Дата добавления - 23.10.2013 в 12:55
Gustav Дата: Четверг, 24.10.2013, 18:33 | Сообщение № 5
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Может, всё проще? Что это за ссылка на диапазон такая недописанная - A4:A ??


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеМожет, всё проще? Что это за ссылка на диапазон такая недописанная - A4:A ??

Автор - Gustav
Дата добавления - 24.10.2013 в 18:33
maradona Дата: Четверг, 24.10.2013, 18:53 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
c A4 до конца A, но ведь на ряде машин работает нормально.
 
Ответить
Сообщениеc A4 до конца A, но ведь на ряде машин работает нормально.

Автор - maradona
Дата добавления - 24.10.2013 в 18:53
Gustav Дата: Пятница, 25.10.2013, 11:40 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
c A4 до конца A

И правда, надо же, в качестве адреса Range вызывает ошибку (справедливую), а в ADO, тем не менее, работает! Спасибо за расширение кругозора.

Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?

P.S. Что-то не могу выразить благодарность в адрес maradona. У нас с механизмом репутации всё нормально? Хм... Теги тоже не хотят вставляться (не нажимаются кнопки тулбара в сообщении), пришлось руками болд делать... ??


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 25.10.2013, 11:45
 
Ответить
Сообщение
c A4 до конца A

И правда, надо же, в качестве адреса Range вызывает ошибку (справедливую), а в ADO, тем не менее, работает! Спасибо за расширение кругозора.

Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?

P.S. Что-то не могу выразить благодарность в адрес maradona. У нас с механизмом репутации всё нормально? Хм... Теги тоже не хотят вставляться (не нажимаются кнопки тулбара в сообщении), пришлось руками болд делать... ??

Автор - Gustav
Дата добавления - 25.10.2013 в 11:40
maradona Дата: Пятница, 25.10.2013, 12:11 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?


Да, рабочая книга сохранена. Пока никаких подвижок, на других машинах срывается макрос после записи в буферный лист, то есть запрос с лефтджоином не проходит.
 
Ответить
Сообщение
Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?


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

Автор - maradona
Дата добавления - 25.10.2013 в 12:11
maradona Дата: Понедельник, 02.12.2013, 11:02 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Решил проблему, упустил важный момент в описании класса, написанного Nervom. ADO.Connect ("сюда вставил коннекшн стринг для формата xlsm с сайта connectionstrings"). Всем спасибо за участие.
 
Ответить
СообщениеРешил проблему, упустил важный момент в описании класса, написанного Nervom. ADO.Connect ("сюда вставил коннекшн стринг для формата xlsm с сайта connectionstrings"). Всем спасибо за участие.

Автор - maradona
Дата добавления - 02.12.2013 в 11:02
AndreTM Дата: Понедельник, 02.12.2013, 17:56 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
А какая именно строка подключения требовалась?

По идее, класс ADO должен сам уметь подключаться к xls*, используя ACE.OLEDB.12.0.

Может, имело смысл просто создавать соответствующий экземпляр класса только перед его использованием?
[vba]
Код
...
ADOR.Disconnect

Dim ADOQ As New ADO
...
[/vba]

Затем, всё же удобнее использовать алиасы: :)
[vba]
Код
ADOQ.Query ("SELECT t2.F1, t2.F4, t2.F5, t2.F12 FROM [Promo_Act$A4:A] t1 LEFT JOIN [Goods$] t2 ON t1.F1 =t2.F1;")
[/vba]

И ещё одно замечание - если у вас используются имена полей для беззаголовочного подключения - явно укажите это до подключения:
[vba]
Код
Dim ADOQ As New ADO
ADOQ.Header = False
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА какая именно строка подключения требовалась?

По идее, класс ADO должен сам уметь подключаться к xls*, используя ACE.OLEDB.12.0.

Может, имело смысл просто создавать соответствующий экземпляр класса только перед его использованием?
[vba]
Код
...
ADOR.Disconnect

Dim ADOQ As New ADO
...
[/vba]

Затем, всё же удобнее использовать алиасы: :)
[vba]
Код
ADOQ.Query ("SELECT t2.F1, t2.F4, t2.F5, t2.F12 FROM [Promo_Act$A4:A] t1 LEFT JOIN [Goods$] t2 ON t1.F1 =t2.F1;")
[/vba]

И ещё одно замечание - если у вас используются имена полей для беззаголовочного подключения - явно укажите это до подключения:
[vba]
Код
Dim ADOQ As New ADO
ADOQ.Header = False
[/vba]

Автор - AndreTM
Дата добавления - 02.12.2013 в 17:56
maradona Дата: Среда, 25.12.2013, 18:19 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
А какая именно строка подключения требовалась?


В общем активно использую Класс, написанный Нервом, но в строку подключения ADO.Connect передаю строку (Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";)

пока никаких сбоев нет, эникейщики пользуются.

Такой вопрос к знатокам : Возможно ли одновременно подключиться к файлу и к БД Оракл и выполнить Left Join ? Иначе я выгружаю на лист1 400 000 записей и лефтджойню по Лист2. Выгрузка на лист занимает много времени. Спасибо
 
Ответить
Сообщение
А какая именно строка подключения требовалась?


В общем активно использую Класс, написанный Нервом, но в строку подключения ADO.Connect передаю строку (Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";)

пока никаких сбоев нет, эникейщики пользуются.

Такой вопрос к знатокам : Возможно ли одновременно подключиться к файлу и к БД Оракл и выполнить Left Join ? Иначе я выгружаю на лист1 400 000 записей и лефтджойню по Лист2. Выгрузка на лист занимает много времени. Спасибо

Автор - maradona
Дата добавления - 25.12.2013 в 18:19
anvg Дата: Четверг, 26.12.2013, 02:58 | Сообщение № 12
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
В "лоб" нельзя, "движки" разные. Можно обходным путём. Сделать связанную таблицу в базе Access с таблицей или представлением Oracle, а такую связанную таблицу Access и лист Excel можно использовать в одном запросе. Вариант использования такой конструкции. Только вот смысл такой операции? Что мешает хранить данные в том же Oracle и получать запросом что требуется?


Сообщение отредактировал anvg - Четверг, 26.12.2013, 03:00
 
Ответить
СообщениеВ "лоб" нельзя, "движки" разные. Можно обходным путём. Сделать связанную таблицу в базе Access с таблицей или представлением Oracle, а такую связанную таблицу Access и лист Excel можно использовать в одном запросе. Вариант использования такой конструкции. Только вот смысл такой операции? Что мешает хранить данные в том же Oracle и получать запросом что требуется?

Автор - anvg
Дата добавления - 26.12.2013 в 02:58
maradona Дата: Четверг, 26.12.2013, 15:02 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Что мешает хранить данные в том же Oracle и получать запросом что требуется?


Допустим у меня на листе одна запись на 100 строк и мне нужна подтянуть к ней вторую из миллиона строк Оракл.

Да, конструкция интересная, надо протестить время выполнения.

Спасибо.
 
Ответить
Сообщение
Что мешает хранить данные в том же Oracle и получать запросом что требуется?


Допустим у меня на листе одна запись на 100 строк и мне нужна подтянуть к ней вторую из миллиона строк Оракл.

Да, конструкция интересная, надо протестить время выполнения.

Спасибо.

Автор - maradona
Дата добавления - 26.12.2013 в 15:02
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!