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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2011, 19:46   #1
Pingy
 
Регистрация: 11.05.2011
Сообщений: 3
По умолчанию Очередной вопрос про VBA и SQL

Вобщем вопрос такой: в макросе для EXCEL нужно использовать достаточно объёмный скрипт, если ввести его в строку для SQL запроса, получится как минимум нечитабельно, а о том чтобы что-то поправлять в такой строке с запросом не может идти и речи.
Так вот, есть ли возможность в качестве параметра при выполнении запроса использовать не строку с SQL запросом, а указать файл в котором лежит скрипт?
То есть примерно в таком вот коде
Dim cnt As ADODB.Connection
Dim rec As ADODB.Recordset
Set cnt = New ADODB.Connection
cnt.Open <строка подключения>
rec.Open 'Select * from Table1', cnt
cnt.Close
Вместо строки с Select использовать хранимый в отдельном файле скрипт '*.sql'
Я в VBA совсем ничего не знаю, так что спрошу сразу ещё - что из себя представляет запись Recordest? То есть, можно ли её за одну-две команды вывести в новый лист экселя (не пробегая next по каждому field), и также, без цикла, залить всю эту запись в другую БД?
Pingy вне форума Ответить с цитированием
Старый 28.07.2011, 00:27   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Pingy Посмотреть сообщение
Вобщем вопрос такой: в макросе для EXCEL нужно использовать достаточно объёмный скрипт, если ввести его в строку для SQL запроса, получится как минимум нечитабельно, а о том чтобы что-то поправлять в такой строке с запросом не может идти и речи.
Так вот, есть ли возможность в качестве параметра при выполнении запроса использовать не строку с SQL запросом, а указать файл в котором лежит скрипт?
То есть примерно в таком вот коде
Dim cnt As ADODB.Connection
Dim rec As ADODB.Recordset
Set cnt = New ADODB.Connection
cnt.Open <строка подключения>
rec.Open 'Select * from Table1', cnt
cnt.Close
Вместо строки с Select использовать хранимый в отдельном файле скрипт '*.sql'
Я в VBA совсем ничего не знаю, так что спрошу сразу ещё - что из себя представляет запись Recordest? То есть, можно ли её за одну-две команды вывести в новый лист экселя (не пробегая next по каждому field), и также, без цикла, залить всю эту запись в другую БД?
1. Лучше все же хранить в модуле VBA, так как синтаксис может отличаться из за различных ковычек и т.д. Либо дополнительно преобразовывать, либо хранить скрипт в соответствии с синтаксисом VBA , но тогда он не будет работать в других приложениях испоьзующих язык SQL
2. посмотрите пример как выводятся данные на лист
http://www.programmersforum.ru/showthread.php?t=161220
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 28.07.2011, 06:33   #3
Pingy
 
Регистрация: 11.05.2011
Сообщений: 3
По умолчанию

1) Эх, жаль конечно, ладно попробую преобразовывать. Тут идея вот в чём заключалась: я хотел предоставить возможность не работающим с VBA людям поправить или заменить в последующем один или несколько из sql скриптов, чтобы при этом сам модуль не потерял работоспособности.
2) Спасибо, однако как быть с загрузкой в другую БД? Проще сразу делать это в sql запросе, или всё же можно, подсоединившись к другой базе, внести таблицу из этого объекта, примерно также красиво, одной-двумя строчками?
Pingy вне форума Ответить с цитированием
Старый 28.07.2011, 12:54   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Pingy Посмотреть сообщение
1) Эх, жаль конечно, ладно попробую преобразовывать. Тут идея вот в чём заключалась: я хотел предоставить возможность не работающим с VBA людям поправить или заменить в последующем один или несколько из sql скриптов, чтобы при этом сам модуль не потерял работоспособности.
2) Спасибо, однако как быть с загрузкой в другую БД? Проще сразу делать это в sql запросе, или всё же можно, подсоединившись к другой базе, внести таблицу из этого объекта, примерно также красиво, одной-двумя строчками?
to 2
если только построчно, массивом не получиться
Я бы для таких целей использовал ETL который специально для этого и заточен.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 28.07.2011, 14:50   #5
Pingy
 
Регистрация: 11.05.2011
Сообщений: 3
По умолчанию

Хотелось бы узнать поподробнее.
На всякий случай опишу более подробно и проблему.
Есть база MSSQL, к которой я имею доступ только на чтение нескольких таблиц и к которой не имею возможности обращаться с базы Oracle.
Есть база Oracle, в которой я могу создавать что угодно.
Есть Excel, в котором формируется отчёт.
Скрипты по выбору данных для отчёта удобно формируют вьюхи на оракловых базах, так что проблема 1 отпала. Однако теперь особенно остро стоит проблема отправки данных, полученных в Recordset из MSSQL, в базу Oracle. Так как последний этап проходит в Экселе, все предыдущие было решено также провести в нём. То есть, взаимодействие между базами должно осуществляться средствами VBA.
Очень прошу, посоветуйте как лучше сделать.
P.S. можно ли к записи обратиться Selectом, сменив ей Activeconnect или создав новый Recordset с Activeconnect = OracleConnect?

Последний раз редактировалось Pingy; 28.07.2011 в 14:52.
Pingy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
Stringgrid, Procedure, cells[m,n]:=DynMas[a,b]. Очередной вопрос начинающего (#003) Albert2008 Компоненты Delphi 4 04.08.2008 12:00
Procedure,function,Stringgrid (#004) Очередной вопрос начинающего. Albert2008 Компоненты Delphi 4 01.08.2008 21:30
Stringgrid, cells[m,n] и двумерные массивы.(#002) Очередной вопрос начинающего. Albert2008 Компоненты Delphi 4 28.07.2008 19:02
Видимо очередной вопрос по БД... Amaranth Помощь студентам 1 16.12.2007 00:56