Всем привет. Используя класс предложенный 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-1maradona
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
И правда, надо же, в качестве адреса Range вызывает ошибку (справедливую), а в ADO, тем не менее, работает! Спасибо за расширение кругозора.
Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?
P.S. Что-то не могу выразить благодарность в адрес maradona. У нас с механизмом репутации всё нормально? Хм... Теги тоже не хотят вставляться (не нажимаются кнопки тулбара в сообщении), пришлось руками болд делать... ??
И правда, надо же, в качестве адреса Range вызывает ошибку (справедливую), а в ADO, тем не менее, работает! Спасибо за расширение кругозора.
Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?
P.S. Что-то не могу выразить благодарность в адрес maradona. У нас с механизмом репутации всё нормально? Хм... Теги тоже не хотят вставляться (не нажимаются кнопки тулбара в сообщении), пришлось руками болд делать... ??Gustav
Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?
Да, рабочая книга сохранена. Пока никаких подвижок, на других машинах срывается макрос после записи в буферный лист, то есть запрос с лефтджоином не проходит.
Еще рискну одним предположением - а у вас при выполнении последнего запроса рабочая книга, к которой он выполняется, уже сохранена на диске?
Да, рабочая книга сохранена. Пока никаких подвижок, на других машинах срывается макрос после записи в буферный лист, то есть запрос с лефтджоином не проходит.maradona
Решил проблему, упустил важный момент в описании класса, написанного Nervom. ADO.Connect ("сюда вставил коннекшн стринг для формата xlsm с сайта connectionstrings"). Всем спасибо за участие.
Решил проблему, упустил важный момент в описании класса, написанного Nervom. ADO.Connect ("сюда вставил коннекшн стринг для формата xlsm с сайта connectionstrings"). Всем спасибо за участие.maradona
В общем активно использую Класс, написанный Нервом, но в строку подключения 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
В "лоб" нельзя, "движки" разные. Можно обходным путём. Сделать связанную таблицу в базе Access с таблицей или представлением Oracle, а такую связанную таблицу Access и лист Excel можно использовать в одном запросе. Вариант использования такой конструкции. Только вот смысл такой операции? Что мешает хранить данные в том же Oracle и получать запросом что требуется?
В "лоб" нельзя, "движки" разные. Можно обходным путём. Сделать связанную таблицу в базе Access с таблицей или представлением Oracle, а такую связанную таблицу Access и лист Excel можно использовать в одном запросе. Вариант использования такой конструкции. Только вот смысл такой операции? Что мешает хранить данные в том же Oracle и получать запросом что требуется?anvg
Сообщение отредактировал anvg - Четверг, 26.12.2013, 03:00