|
|
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
Есть удалённая БД Oracle весьма нетривиальной структуры и очень внушительного размера. Доступ к ней осуществляется с помощью Java-клиента, создающего сессию со 128битным кодированием на сайт, который обеспечивает доступ к данным, формачкам и запросам. На данном этапе синхронизация осуществляется методом: "выбор нужной таблички и запроса вручную" -> "Ctr+A" -> "Ctr+C" -> "Ctr+V в экселовский файл" -> "DAO-импорт данных в Access" Это процедура повторяется каждый день - копируются записи за вчера. При этом о какой-либо более-менее качественной синхронизации речи не идёт. Поскольку данные на сервере динамические, все изменения, происходящие с "позавчерашними" данными приходится вносить вручную :( При этом примерно 100 записей в день, и темпы роста 30% в месяц. В этой связи остро встают несколько вопросов: 1). Как организовать прямой доступ из Ассеssa к БД, если есть IP адрес базы, логин и пароль Java-клиента. Что искать я знаю (скорее всего это не получится - кто меня туда пустит) 2). Как организовать вообще доступ к удалённой БД из Ассеssa, имея её электронный адрес, логин и пароль (это если они выделят нужные данные в отдельную базу, что более вероятно) 3). Как считать данные в Ассеss из активного окна браузера (HTML табличка), не копируя эти данные на диск (on-line) - это если эти скоты, хотя и не шотландцы, наотрез откажутся сотрудничать... 4). Как объяснить шефу не програмисту, что существующая схема работы - не идеальна :) 5). Можно ли из Accessа ползать по сайту с элементами управления (поля со списком, кнопочки)? Потому как одним WebBrowser0.Navigate "www.sql.ru" обойтись не получится В наличии имеются: Accеss, Excell, VBA, SQL. Где-то в тумбочке ещё валялась Java и PHP, но только если очень надо. З.Ы. Что-то я вообще ничего не смог найти касательно подключений к БД по и-нету из VBA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 02:56 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
У тебя должен стоять Оракловый клиент. Если его нет, тогда ставь (хотя если его нет, то ты по идее не мог и через веб-интерфейс работать). Далее ищи файлик TNSNAMES.ORA (путь к нему выглядит примерно так: C:\ORACLE\ORA10\NETWORK\ADMIN\TNSNAMES.ORA) В нем ищи IP своей базы, куда коннектишься. Или создавай аналогичную запись со своим IP, если таковой нет (по сути это ты создаешь алиас). HOME = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 124.254.35.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = myOracleDB) ) ) Примечание: IP-шник выше вбил от балды, совпадения случайны. SERVICE_NAME = myOracleDB - это и есть алиас, по которому потом будет коннектиться. Теперь из VBA можно подключиться к этой базе. К сожалению, я не помню на память синтаксис. Завтра запостю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 16:40 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
ШыфлНа данном этапе синхронизация осуществляется методом: "выбор нужной таблички и запроса вручную" -> "Ctr+A" -> "Ctr+C" -> "Ctr+V в экселовский файл" -> "DAO-импорт данных в Access"Давить. Это один из самых плохих подходов. Шыфл1). Как организовать прямой доступ из Ассеssa к БД, если есть IP адрес базы, логин и пароль Java-клиента. Что искать я знаю (скорее всего это не получится - кто меня туда пустит)File -> Get External Data -> Link Tables. Появится окно подключения похожее на выбор файла. В самом нижнем поле выбери ODBC Databases. Появится новое окно с выбором ODBC DSN. Там выбираешь DSN в котором описано подключение к нужной базе. Выберешь DSN - в третьем окне будет выбор таблицы. Потом задаешь для нужной таблицы псевдоним и все... В твоей Акцессной базе появится таблица данный из которой будут автоматически читаться из удаленной базы. Шыфл4). Как объяснить шефу не програмисту, что существующая схема работы - не идеальна :) Заболей. И пусть всю неделю твоей болезни он сам занимается этой фигней. А если ошибится и при ручном копировании скопировать данные за другой день - это будет еще более убедительно :) ШыфлЗ.Ы. Что-то я вообще ничего не смог найти касательно подключений к БД по и-нету из VBA.И не найдешь :) На самом деле нет разницы подключаешься ты через интернет или по локальной сети. Читай про linked tables, а они не устроят, то изучай ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 17:47 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
Вот здесь еще почитай. Правда это про excel, но я думаю можно точно так же делать и в Access. http://www.oraxcel.com/projects/sqlxl/article_oramag.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 19:42 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
NFТеперь из VBA можно подключиться к этой базе. К сожалению, я не помню на память синтаксис. Завтра запостю. NFВот здесь еще почитай. Библиотека ОО4О отдельно не поставляется, а всё вместе весит 170 метров 8) Причём чувствую, что это нескольто сложнее, чем обычный АDO. Я не совсем понял способ настройки соединения, можно по-подробнее. И большое спасибо за ссылку - буду разбираться с ОО4О. Интересно, а обычный АDO с Oracle не работает? White OwlFile -> Get External Data -> Link Tables. Появится окно подключения похожее на выбор файла. В самом нижнем поле выбери ODBC Databases. Появится новое окно с выбором ODBC DSN. Там выбираешь DSN в котором описано подключение к нужной базе. Выберешь DSN - в третьем окне будет выбор таблицы. Потом задаешь для нужной таблицы псевдоним и все... В твоей Акцессной базе появится таблица данный из которой будут автоматически читаться из удаленной базы. Из Ассеssa просто так подключиться мне врятли дадут, потому как это кодированная программа. Link Tables врят ли покатят. Потому как там https :( К тому же я так и не разобрался, как правельно настроить DSN даже для ftp... :( И всё-таки, тем не менее, хотелось бы узнать больше и о свойствах объекта WebBrowser, и его истользовании в Ассеss... Потому что, судя по косвенным свидетельствам, подключиться к БД как к БД не получится, придётся довольствоваться Web клиентом. :( Или у нас вообще никто кроме меня ничего не смыслит в програмировании... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 21:59 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
ШыфлИнтересно, а обычный АDO с Oracle не работает?Работает конечно. Но ADO это надстройка над ODBC или OLE DB драйверами. То есть в любом случае надо искать либо ODBC, либо OLE DB драйвер коннекта. ШыфлИз Ассеssa просто так подключиться мне врятли дадут, потому как это кодированная программа. Link Tables врят ли покатят.Если вежливо попросить, могут и дать :) Кодированость программы в этом деле совсем не помеха. Если администратор базы данных даст тебе прямой доступ к БД, то он тебе даст и логин и пароль и все кода. ШыфлПотому как там https :( К тому же я так и не разобрался, как правельно настроить DSN даже для ftp... :(Во первых, отделяем мух от котлет. https и ftp это так скажем "браузерные" протоколы. В интренет эксплорере ты пишешь https://www.чего-то-там.com и попадаешь на веб страничку. Точно так же и с ftp. А прямой доступ к базе данных идет совершенно другими средствами - ODBC, ADO, OO4O и им подобными. К https и ftp они отношения не имеют совершенно. DSN по ftp нельзя настроить в принципе :) ШыфлИ всё-таки, тем не менее, хотелось бы узнать больше и о свойствах объекта WebBrowser, и его истользовании в Ассеss... Не стоит... очень не стоит идти в этом направлении. Лучше всего прямо сейчас пойти на поклон к тому человеку который ставил вам эту самую Оракловую базу и/или кто поддерживает ее работоспособность. Он сможет пальцем в экран ткнуть, а мы только теорию объяснить можем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 22:40 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
ШыфлБиблиотека ОО4О отдельно не поставляется, а всё вместе весит 170 метров 8) Причём чувствую, что это нескольто сложнее, чем обычный АDO. Я не совсем понял способ настройки соединения, можно по-подробнее. Если честно, то я эту библиотеку и не ставил никогда. Ставлю клиента Ораклового и все, больше ничего не надо. А как без клиента работать с сервером я, если честно, представить и не могу. Т.е. скорее всего у тебя уже стоит клиент на машине. Сам механизм соединения я тоже не смогу описать подробно. В tnsnames.ora в приниципе видно, что для соединения нужно лишь знать IP сервера и порт. Если клиент стучится туда, то его просят авторизоваться, а тут уже используется твой логин и пароль. В VBA это делает строки: Код: plaintext 1. 2. 3. 4. 5. 6. Все, ты залогинен. Теперь можешь писать SQL запросы так: Код: plaintext 1. 2. В принципе как ходить по записям там тоже описано: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вот и все. Не знаю проще ли это чем ADO или сложнее, я ADO не пользовался. В принципе, если есть соединение и возможность писать запросы, то больше ничего и не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 23:41 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
White Owl ШыфлИнтересно, а обычный АDO с Oracle не работает?Работает конечно. Но ADO это надстройка над ODBC или OLE DB драйверами. То есть в любом случае надо искать либо ODBC, либо OLE DB драйвер коннекта. Насколько я понял, это и есть ключевой момент - настроить соединение с базой средствами ODBC или OLE DB. Причём, насколько я понял, для этого надо копаться чуть ли не в регистре :/ Или нет? White Owl ШыфлИз Ассеssa просто так подключиться мне врятли дадут, потому как это кодированная программа. Link Tables врят ли покатят.Если вежливо попросить, могут и дать :) Кодированость программы в этом деле совсем не помеха. Если администратор базы данных даст тебе прямой доступ к БД, то он тебе даст и логин и пароль и все кода. Администратора базы я в глаза не видел, и вряд ли увижу. Потому как он сидит в Лондоне. Причём доступов он не даёт, и давать не собирается. Единственное что у меня есть - это доступ к Web-интерфейсу базы на уровне Админа. Надеюсь, этого хватит. White Owl ШыфлПотому как там https :( К тому же я так и не разобрался, как правельно настроить DSN даже для ftp... :(Во первых, отделяем мух от котлет. https и ftp это так скажем "браузерные" протоколы. В интренет эксплорере ты пишешь https://www.чего-то-там.com и попадаешь на веб страничку. Точно так же и с ftp. А прямой доступ к базе данных идет совершенно другими средствами - ODBC, ADO, OO4O и им подобными. К https и ftp они отношения не имеют совершенно. DSN по ftp нельзя настроить в принципе :) Не поймите привратно, но я попытался настроить доступ к базе данных с помощью утилиты odbcad32.exe Для "месных" БД всё катит, а для лежащей на удалённом FTP, и у меня не получается :( Нужно подключить её как ситевой диск... А как это настроить для и-нета, я вообще плохо представляю. White Owl ШыфлИ всё-таки, тем не менее, хотелось бы узнать больше и о свойствах объекта WebBrowser, и его истользовании в Ассеss... Не стоит... очень не стоит идти в этом направлении. Лучше всего прямо сейчас пойти на поклон к тому человеку который ставил вам эту самую Оракловую базу и/или кто поддерживает ее работоспособность. Он сможет пальцем в экран ткнуть, а мы только теорию объяснить можем. Эти люди приезжали однажды, и настроили java-клиент для доступа через web-интерфейс. Потом они улетели. Это было давно, очень давно. Тогда я ещё там не работал. Теперь никто не хочет ничего менять, никто ничего не знает. Придётся всё делать самому, причём ручками. Для начала не плохо бы вообще понять, что надо делать. В таком контексте рабода с Accessoвским OLE-объектом WebBrowser кажется мне меньшим из зол... Или разбираться с Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2007, 00:23 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
ШыфлНасколько я понял, это и есть ключевой момент - настроить соединение с базой средствами ODBC или OLE DB. Причём, насколько я понял, для этого надо копаться чуть ли не в регистре :/ Или нет?Нет, самому копаться в реестре не нужно. Достаточно запустить odbcad32 и все сделать через его диалоги. ШыфлАдминистратора базы я в глаза не видел, и вряд ли увижу. Потому как он сидит в Лондоне. Причём доступов он не даёт, и давать не собирается. Единственное что у меня есть - это доступ к Web-интерфейсу базы на уровне Админа. Надеюсь, этого хватит.Угу.... В таком случае, вариантов три (это я исхожу из системы только с веб-интерфейсом ): 1) Очень внимательно посмотреть на всю систему в целом. Скорее всего, в ней уже есть какие-либо механизмы экспорта данных. Скорее всего в dbf или csv формат, если система уникальная. Либо в формат какой-нибудь популярной утилиты если система решает популярную задачу, например банки (те же CitiBank, Chase, etc) предоставляющие веб-доступ к аккануту позволяют выкачивать файлик готовый для загрузки в QuickBooks. 2) Взять среду предназначеную для вытягивания данных с веб-страниц (я предпочитаю rebol - www.rebol.org) и написать на нем все что нужно - в смысле авторизацию на веб-сайте, выкачивание нужной странички, ее первичную расшифровку, и перекодирование в dbf/csv. Повесить этот скрипт в шедулер и пусть раз в день выкачивает "состяние на день". Потом уже затягивать все выкачаное в Access 3) Сделать все тоже самое что в предыдущем варианте, но напрямую из Акцесса... Это будет очень неудобно и печально, но теоретически возможно через тот самый OLE WebBrowser. Но лично я не рекомендую - очень уж неудобный это путь. Слишком много прийдется делать ручками. ШыфлНе поймите привратно, но я попытался настроить доступ к базе данных с помощью утилиты odbcad32.exe Для "месных" БД всё катит, а для лежащей на удалённом FTP, и у меня не получается :(И не получится. Подключать базу как файл лежащий где угодно (хоть на своем диске, хоть на сетевом) можно только для файловых баз данных (XBase, Access). Для нормальных (в смысле для Оракла) доступ к файлам запрещен в принципе. У тебя есть адрес сервера БД и все. Ну а запустить БД с ftp невозможно в принципе. FTP это протокол позволяющий выкачать файл с сервера или залить файл на сервер и все (FTP = File Transfer Protocol). А для работы с файлом как с БД этот файл надо открыть на свободный доступ и держать его открытым весь период работы с БД. ШыфлЭти люди приезжали однажды, и настроили java-клиент для доступа через web-интерфейс.СТОП! Так все таки, что у вас java-клиент или веб-интерфейс? Это очень разные вещи. Если это клиент то скорее всего у него есть функция экспорта данных, а если нету, то ее нужно заказать у разработчиков. И если это клиент, то WebBrowser ничем не поможет. ШыфлДля начала не плохо бы вообще понять, что надо делать. В таком контексте рабода с Accessoвским OLE-объектом WebBrowser кажется мне меньшим из зол... Или разбираться с Oracle.Вот-вот :) Разбиратся с Ораклом - самое надежное и лучшее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2007, 01:17 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
2 NF NFЕсли честно, то я эту библиотеку и не ставил никогда. Ставлю клиента Ораклового и все, больше ничего не надо. А как без клиента работать с сервером я, если честно, представить и не могу. Т.е. скорее всего у тебя уже стоит клиент на машине. Сам механизм соединения я тоже не смогу описать подробно. В tnsnames.ora в приниципе видно, что для соединения нужно лишь знать IP сервера и порт. Если клиент стучится туда, то его просят авторизоваться, а тут уже используется твой логин и пароль. Вскрытие показало, что клиента Oracle у нас нет. Скорее всего на сервере стоит хитрый Java-скрипт, который каботает как мост между браузером и Oracle. На клиенте стоит простая Java-прога, которая общается с Java-скриптом сервера. :( OO4O - это идеальный вариант, буду под него капать. Только если для этого придётся ставить Oracle-клиента, я сомневаюсь, что это получится... В любом случае большое спасибо за ссылку. Покажу её начальству (они, между прочим, англичане :) и попытаюсь объяснить - может сработает... 2 White Owl White OwlИ не получится. Подключать базу как файл лежащий где угодно (хоть на своем диске, хоть на сетевом) можно только для файловых баз данных (XBase, Access). Для нормальных (в смысле для Оракла) доступ к файлам запрещен в принципе. У тебя есть адрес сервера БД и все Я, конечно, не совсем понял как это работает. Наверное потому, что Oracle-клиент не установлет, не работает и Oracle ODBC драйвер.... <_< Ладно, для этих вопросов у нас, вроде как сетевик есть. Вот пусть и разбирается :) White OwlУгу.... В таком случае, вариантов три (это я исхожу из системы только с веб-интерфейсом): 2) Взять среду предназначеную для вытягивания данных с веб-страниц (я предпочитаю rebol - www.rebol.org) и написать на нем все что нужно - в смысле авторизацию на веб-сайте, выкачивание нужной странички, ее первичную расшифровку, и перекодирование в dbf/csv. Повесить этот скрипт в шедулер и пусть раз в день выкачивает "состяние на день". Потом уже затягивать все выкачаное в Access 3) Сделать все тоже самое что в предыдущем варианте, но напрямую из Акцесса... Это будет очень неудобно и печально, но теоретически возможно через тот самый OLE WebBrowser. Но лично я не рекомендую - очень уж неудобный это путь. Слишком много прийдется делать ручками. Я уже сам понял, что это не выход... а вход в тупик. Но за ссылочку спасибо, если англичане окажутся скотами и подключиться к базе не удастся, придётся разбираться в проблематике... White Owl1) Очень внимательно посмотреть на всю систему в целом. Скорее всего, в ней уже есть какие-либо механизмы экспорта данных. Скорее всего в dbf или csv формат, если система уникальная. Либо в формат какой-нибудь популярной утилиты если система решает популярную задачу, например банки (те же CitiBank, Chase, etc) предоставляющие веб-доступ к аккануту позволяют выкачивать файлик готовый для загрузки в QuickBooks. Программа уникальная, написанная нашим же отделением в Англии. Но единственная система выгрузки данных, это Ctrl-A Ctrl-C Ctrl-V . Причём автоматизацию обработки получившихся данных писал я лично. :) До этого у них сидел "автоматизатор", который форматировал данные исключительно вручную. White OwlСТОП! Так все таки, что у вас java-клиент или веб-интерфейс? Это очень разные вещи. Если это клиент то скорее всего у него есть функция экспорта данных, а если нету, то ее нужно заказать у разработчиков. И если это клиент, то WebBrowser ничем не поможет. Этого я не знаю. Если в строку браузера просто вбить адрес, то можно залогинится, но работать не получится - страницы отображаются с ошибкой. А если запустить Java-клиента, ввести логин и пароль, он сам открывает окно браузера и логинится. После этого можно нормально работать с Web-интерфейсом, как на обычном сайте, ходить по ссылкам и т.п. Но если окно не активно 5 минут, сеанс заканчивается, и надо опять логиниться через клиент. Скорее всего Java-клиент генерирует крипто-ключ, который действует некоторое время. Но дальше в комуникации с сервером не участвует. Хотя в этом вопросе я не силён... З.Ы. Всё, похоже, упирается в Oracle-клиент, которого нет :( Буду копать дальше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2007, 22:47 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
White OwlВот-вот :) Разбиратся с Ораклом - самое надежное и лучшее. Думаю есть смысл задать этот вопрос и на форуме Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2007, 10:20 |
|
||
|
Синхронизация с удалённой БД посредствам VBA
|
|||
|---|---|---|---|
|
#18+
ШыфлВскрытие показало, что клиента Oracle у нас нет. Скорее всего на сервере стоит хитрый Java-скрипт, который каботает как мост между браузером и Oracle. На клиенте стоит простая Java-прога, которая общается с Java-скриптом сервера. :(Вы будете смеятся, но на сервере java-скрипты не работают никогда :) Если серверная часть написана на java, она называется java-servlet. Динамический html пишется c использование языка javascript, но он работает на клиентской машине а не на сервере. А еще есть jscript который очень похож на javascript и вот он уже работает на сервере, но он все же jscript... ШыфлПрограмма уникальная, написанная нашим же отделением в Англии. Но единственная система выгрузки данных, это Ctrl-A Ctrl-C Ctrl-V . Причём автоматизацию обработки получившихся данных писал я лично. :) До этого у них сидел "автоматизатор", который форматировал данные исключительно вручную.Тогда одним из самых лучших вариантов будет надавить на IT отдел чтобы они сделали какой-нибудь механизм распределения данных между несколькими физическими базами данных. Например, можно сделать у себя полную копию лондонской БД и работать всегда с локальной копией - повысится время отклика на запросы простых клиентов, и если пропадет связь с главным офисом работа не встанет. А потом раз в цать дней/часов/минут проводить сеанс репликации - синхронизировать данные между главной и филиальскими базами. ШыфлСкорее всего Java-клиент генерирует крипто-ключ, который действует некоторое время. Но дальше в комуникации с сервером не участвует.Очень похоже на правду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2007, 18:11 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34503216&tid=2164100]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 438ms |

| 0 / 0 |
