Может ли Access подключаться к удаленной базе данных Postgresql через ODBC?
В настоящее время у меня есть приложение MS Access, которое подключается к базе данных PostgreSQL через ODBC. Это успешно работает в локальной сети с 20 пользователями (каждый из которых работает со своей версией Access). Сейчас я обдумываю некоторые сценарии аварийного восстановления, и кажется, что быстрым и простым способом защиты данных является использование доставки журналов для создания теплого резервирования.
Это заставило меня задуматься о переводе теплого режима ожидания в удаленное место, но у меня возник вопрос:
Можно ли использовать подключение к удаленной базе данных через ODBC? Т.е. удаленная база данных может быть в той же стране с нормальным временем пинга, и у меня есть линия SDSL 1 Мбит.
3 ответа
Краткий ответ: да.
Длинный ответ: если вы возвращаете меньшие наборы данных, да. Вам также нужно будет включить определенные флаги и настройки в драйвере pgodbc, так как Access откажется от того, что возвращается ему с сервера:
KSQO (Keyset Query Optimization) должен быть включен. Да, я знаю, что в документах говорится, что это не обязательно, но происходит то, что MSAccess передает серверу несколько странно выглядящий SQL. Это просто немного загромождает оператор SQL. Не веришь мне? Включите ведение логов для ODBC, отправьте один запрос, выключите логи, пропустите несколько мегаяшек и на 90% пути вниз вы увидите неприятный SQL-оператор, который был сгенерирован и пропущен. Нет, это не драйвер ODBC, а Access.
Использовать Declare/Fetch следует, если вы планируете интерактивно просматривать большой набор данных. Это заставит драйвер извлекать меньшие порции вашего набора результатов, вместо того, чтобы выгрузить в него одну монстровую нагрузку.
Текст как LongVarChar - вы можете проверить это. Я подозреваю, что вы захотите это "на".
Неизвестные размеры должны быть установлены на максимум.
Макс Varchar рекомендуется быть на 254 или меньше, хотя вы можете сделать это больше.
Extra Opts - установить на 0x6 (Поддельный MS SQL Server + Ответить в ANSI, а не в Юникоде).
(все они могут быть найдены в http://psqlodbc.projects.postgresql.org/config.html)
Имейте в виду, что большие наборы данных причинят вам боль, несмотря на тот факт, что данные, возвращаемые с сервера, обычно представлены в компактном двоичном формате.
Мой опыт работы с базами данных MSA и WAN никогда не был таким большим. Всегда был момент, когда Access решает извлечь много данных из базы данных. Два моих успешных способа - это либо разместить клиентский интерфейс Access на удаленном сервере, либо использовать Terminal Server. Или использовать запросы SQL Passthrough, чтобы вы явно контролировали то, что проходит к / от сервера базы данных.
Чтобы приложение Access хорошо работало в этом сценарии, оно должно быть спроектировано для извлечения данных mininum и, вероятно, будет работать лучше всего с несвязанными формами, так как Access/Jet/ACE должен проверять удаленную базу данных каждую секунду или около того для обновления данных. отображается в связанных формах. Поскольку интервал обновления ODBC может быть установлен в Access, следует поэкспериментировать с ним, прежде чем идти по радикальному пути полного освобождения, поскольку это будет означать, что вы упускаете 90% преимущества использования Access в качестве внешнего интерфейса.
В целом, я не вижу сценарий, описанный как особенно жизнеспособный. Это будет означать, что хвост виляет собакой, а ваш план на случай катастрофы определяет дизайн вашего обычного приложения. Я бы сказал, что размещение на Windows Terminal Server приложения где-то рядом с удаленным сервером базы данных было бы гораздо лучшим решением, поскольку оно не требовало бы значительных изменений в приложении Access.