Бравенец
Подключение Open Office к базе данных
В своей работе передо мной стояла задача связать производственную информационную систему с офисной средой. Хотя Microsoft Office в основном используется в офисах, я не буду заострять внимание на этом пакете программ, а остановлюсь в основном на OpenOffice. Наша информационная система работает на базе данных PostgreSQL, опыта работы с другими базами у меня нет. Более подробную информацию о других базах данных можно найти в Интернете — ссылки находятся в отдельном разделе этой статьи. Если вы хотите подключиться к немного тупее, но намного быстрее базы данных SQL (я прошу о переводе, потому что пользователей этой базы данных намного больше, чем пользователей PostgreSQL), вы найдете драйвер, встроенный прямо в OpenOffice, и там нет необходимости устанавливать его.
Ссылки
http://jdbc.postgresql.org Драйверы PostgreSQL JDBC. Здесь вы получите готовый JDBC-драйвер для вашей версии Java и сервер базы данных. http://www.fankhausers.com/postgresql/jdbc/ FAQ по PostgreSQL и JDBC http://dba.openoffice.org/drivers/postgresql/index.html Драйвер PostgreSQL изначально написан для OpenOffice. Не тратьте на него время. Это почти непригодно. Я даю ссылку только для того, чтобы предостеречь от разочарований и тщетных попыток добиться разумных результатов. http://dba.openoffice.org/FAQ/specific.html Доступ к базе данных OpenOffice — советы и рекомендации http://www.unixodbc.org unixODBC — возможно, работает, но перевод и настройка немного сложны
Установка
Мои эксперименты показали, что наиболее удобным способом подключения OpenOffice к базе данных PostgreSQL является JDBC. Хоть и есть драйвер, написанный в OpenOffice специально для связи с PostgreSQL, у меня он не сработал. При использовании нативного драйвера для PostgreSQL возникают проблемы с датами и вещественными числами и, возможно, многие другие.проблемы, с которыми я не разобрался, потому что не смог перенести даже с неумением драйвера работать с датами.
В следующем тексте я предполагаю, что OpenOffice, PostgreSQL и Java уже установлены и работают. Все три пакета довольно распространены в дистрибутивах Linux, поэтому я ограничусь только описанием установки драйвера JDBC.
Драйвер отличается для каждой базы данных. При поиске драйвера JDBC ищите драйвер специально для вашей базы данных и версии Java. В моем случае это файл pg74.1jdbc3.jar. Скопируйте его в место, указанное переменной CLASSPATH, или в место установки Java, предназначенное для внешних библиотек. Прежде чем я начал писать эту статью, файл pg74.1.jdbc3.jar нужно было скопировать сюда:
cp pg74.1.jdbc3.jar /usr/java/j2sdk1.4.1_02/jre/lib/ext/postgres.jar .
После того, как я установил более новую версию Java из-за Mozilla, мне пришлось установить драйвер следующим образом:
cp pg74.1.jdbc3.jar /usr/java/j2re1.4.2_03/lib/ext/postgres.jar .
В принципе, это всего лишь вопрос копирования драйвера куда-нибудь, где Java ищет библиотеки, желательно прямо в каталог, предназначенный для внешних модулей (lib/ext). Конечно, не забывайте, что файл должен иметь соответствующие права доступа: -rw-r—r—
Это должно завершить всю установку. Для использования драйвера JDBC необходимо настроить как сервер базы данных, так и OpenOffice.
Настройки базы данных PostgreSQL
Чтобы сервер базы данных мог прослушивать порт TCP/5432 и связываться с клиентами по сети, необходимо включить связь TCP/IP. Один из вариантов — запустить сервер базы данных с параметром -i, чтобы разрешить сетевое взаимодействие.
Другой вариант — отредактировать файл конфигурации postgresql.conf, добавить в него строки:
tcpip_socket = true
порт =5432
Прежде чем мы начнем дальнейшие эксперименты, было бы неплохо создать пробную базу данных. Если вы хотите получить доступ к существующей базе данных с данными, которые вас хоть немного волнуют, то в качестве меры безопасности я бы рекомендовал создать пользователя, назовем его «офис», с правами только на чтение. OpenOffice также открывает таблицы для записи, а в среде офисных таблиц слишком легко перезаписать данные нежелательным образом.
Если вы собираетесь хранить в базе данных символы на чешском языке, при создании базы данных необходимо ввести их кодировку. В противном случае драйвер JDBC в OpenOffice протестует, и невозможно извлечь какие-либо данные из таблиц. Для базы данных PostgreSQL кодировка базы данных должна быть указана при ее создании:
createb -E Latin2 пытается
createuser office
sql template1
Независимо от того, разрешаете ли вы тем или иным образом сетевое взаимодействие с сервером базы данных, вам все равно необходимо настроить права доступа к сети в файле pg_hba.conf (я предполагаю, что это сеть 10.1.1.0/24 — введите свои собственные значения). В конфигурационном файле pg_hba.conf можно выбрать, будет ли требоваться пароль при подключении к базе данных. Если вы хотите разрешить доступ к базе данных без паролей с других компьютеров в сети, а не только с сервера базы данных, используйте слово «доверие» вместо «пароль»:
гость пробует офис 127.0.0.1 255.255.255.255 trust
гость пробует пароль office 10.1.1.0 255.255.255.0
Владелец созданной базы данных не обязательно должен быть офисным пользователем. Офисному пользователю даже не нужно существовать как учетная запись Linux (или как учетная запись другой системы, в которой вы запускаете ядро базы данных). Однако при создании новой базы данных проще, если офисный пользователь также существует в системе.
Для целей этой статьи я создал новую базу данных и, чтобы она не была совсем пустой, создал в ней простую таблицу и заполнил ее данными:
Если вы подключаетесь к существующей базе данных, необходимо предоставить офисному пользователю хотя бы минимальные права на таблицы, к которым вы хотите получить доступ из OpenOffice. Если вы хотите вставлять в таблицы и используете последовательный тип данных, не забудьте соответствующие последовательности:
предоставить выбор в таблице database_table для офиса;
предоставить обновление базы данных_таблицы в офис;
разрешить вставку в базу данных_таблицы в офис;
предоставить выбор в базе данных database_table_key_seq для офиса;
предоставить обновление базы данных database_table_key_seq в офис;
Настройка источников данных
В форме нажмите кнопку «Новый источник данных» вверху списка источников данных. Кнопка расположена незаметно, и, указав вам на нее, я избавил вас от большого количества работы и размышлений о том, как подключиться к различным базам данных в OpenOffice.
На вкладке «Общие» назовите соединение, выберите тип базы данных (JDBC) и введите URL-адрес источника данных. Например, URL-адрес может выглядеть следующим образом:
В URL указано, что должен использоваться интерфейс JDBC, драйвер PostgreSQL, мы будем подключаться к серверу dbserver к базе данных по попыткам.
На вкладке JDBC заполните класс драйвера JDBC. Это должен быть «org.postgresql.Driver» для базы данных PostgreSQL. Следующим пунктом для заполнения является имя пользователя. В нашем примере используйте имя «офис». Нам все еще нужно проверить запрос пароля. Office не запрашивает пароль автоматически, и если для доступа к базе данных требуется пароль, OpenOffice не сможет подключиться, если этот параметр не отмечен. На этом все необходимые настройки завершены, и мы можем попытаться подключиться к базе данных. При переключении на вкладку «Таблицы» OpenOffice попытается подключиться к базе данных и создать список таблиц.
Инструмент для управления ресурсами данных примитивен, но достаточно мощен и опасен. я не хочуконечно, чтобы никого не вводить в заблуждение, но отметьте какую-нибудь таблицу и нажмите на картинку с красным крестиком. Затем посмотрите, как были установлены права доступа для офисных пользователей в базе данных и существует ли еще таблица, и подумайте, какие важные данные вы потеряли одним щелчком мыши. Именно простота, с которой можно создавать, изменять и удалять таблицы с помощью этого инструмента, является причиной максимально ограничительной настройки прав доступа из OpenOffice. Ни в коем случае не давайте обычным пользователям права на запись или изменение таблиц. К счастью, в PostgreSQL можно легко создавать правила записи в представление, программировать функции проверки данных и запрещать доступ к реальным таблицам с данными.
В OpenOffice таблицы базы данных можно создавать одним щелчком мыши, а не просто удалять. Однако вы можете создавать только очень примитивные таблицы без ссылок на ваше окружение. Такой способ создания таблиц меня никогда не устраивал, потому что большинство свойств, которыми обладают мои таблицы (внешние ключи, проверки лимитов, уникальные индексы и т. д.), нельзя ввести через OpenOffice.
Связывание таблиц базы данных с документами OpenOffice
Если вам удалось подключиться к базе данных и пролистать список таблиц, ничто не мешает вам открыть таблицу базы данных и импортировать данные, например, в электронную таблицу.
Прежде чем вы начнете, я хотел бы предупредить вас об ошибке, которая стоила мне много времени и усилий. Я создал ряд таблиц в MS Excel 2000 с помощью MS Query. Если вы, как и я, привыкли импортировать данные в Excel, отработанная процедура приведет вас в ад через пункт меню Данные->Руководство по данным. Это не тот путь. Инструмент предназначен только для создания сводных таблиц, и если вы хотя бы минимально владеете SQL-запросами, рекомендую использовать сохраненные SQL-запросы или представления — т.е.обрабатывать данные на стороне сервера базы данных. Сервер базы данных знает о хранении данных гораздо больше, чем электронная таблица может даже представить, и может обрабатывать данные с несравненно большей эффективностью и гораздо быстрее.
В OpenOffice есть гораздо более простой инструмент, чем MS Query в Office 2000 (возможно, в более новых версиях MS Office есть такие же инструменты, как в OpenOffice. Я не знаю. У меня не было возможности использовать более новый офис от Майкрософт еще). Откройте новую таблицу в табличном калькуляторе и нажмите клавишу F4 или выберите в меню Вид->Источники данных. Окно с таблицей разделится и в его верхней части откроется инструмент для работы с базами данных.
Данные можно не только просматривать непосредственно в инструменте, но также редактировать или удалять, а в таблицы можно вставлять новые предложения. Даже по ошибке изменить данные в таблицах до неузнаваемости не проблема. Это еще одна причина для правильной настройки прав доступа и строгого разделения отдельных пользователей.
Если вы попытаетесь изменить данные в образце таблицы phone_list, вы, вероятно, не столкнетесь с какими-либо проблемами. Но как только вы начнете экспериментировать со своими собственными электронными таблицами, вы можете обнаружить, что некоторые электронные таблицы просто невозможно изменить, как бы вы ни старались, а OpenOffice отказывается объяснять вам, почему он ведет себя так хаотично. Это связано с первичными ключами — для того, чтобы данные базы данных можно было изменить в OpenOffice, в таблице должен быть создан уникальный первичный ключ. В противном случае OpenOffice не сможет отличить отдельные предложения в таблице друг от друга, и вместо того, чтобы рисковать недовольством пользователя тем фактом, что исправление одного предложения перезапишет половину таблицы базы данных, он предпочитает полностью запрещать изменения.
Но я написал эту статью главным образом для импорта данных в документы OpenOffice. Привыкнув к обходным процедурам из MS Office 2000, я нажимал напраснощелкать правой кнопкой мыши по электронной таблице, бродить по сводным таблицам и ругать создателя OpenOffice за такую сумасшедшую программу. Решение простое и понятное: захватите мышкой таблицу за пустое верхнее левое поле в заголовках и перетащите ее в нужное место в документе. Данные, импортированные в электронную таблицу, не требуют дальнейших операций. Однако если вы импортируете данные в текстовый редактор, у вас по-прежнему есть возможность выбрать способ отображения данных (таблица, поле, текст и многие другие атрибуты форматирования).
Данные, однажды импортированные в документ, больше не имеют прямой связи с базой данных. Если вы измените некоторые данные, изменения не будут отражены в базе данных. Однако это не означает, что соединение с базой данных пропало полностью. Области с запросами к базе данных можно отобразить в инструменте Данные->Выбрать область, а затем восстановить данные из базы данных, выбрав Данные->Восстановить область;
Ограничения
Если в таблице определено несколько областей данных, я не мог восстановить все области сразу — каждую область данных всегда нужно было помечать и восстанавливать отдельно. Может быть, для этого есть такой простой прием, как перетащить мышкой таблицу в документ — я пока не разобрался.
OpenOffice не может импортировать некоторые типы данных. Конечно, я не использую все возможные типы данных в PostgreSQL. В базе данных я хранил данные экономической важности и никогда не использовал различные геометрические или интернет-типы данных. Я только столкнулся с интервальным типом данных. К счастью, там ситуацию можно решить, пересчитав, например, часы прямо в базе.
Еще одно ограничение, на этот раз гораздо более неприятное, — это практическая невозможность работы с последовательными первичными ключами при изменении данных. Этот тип данных обычно не вставляется во время вставки, а содержимое элемента данных создается самой базой данных — Office не знает о сгенерированных данных. В простомоднако эта проблема не возникает при импорте документов. Это только начинает вызывать проблемы при работе с формами, которые не являются предметом этой статьи. Вы можете столкнуться с этим ограничением в процедурах, описанных в этой статье, только при изменении данных в инструменте «Источники данных».
В заключение
В статье я продемонстрировал только самый простой способ подключения базы данных к OpenOffice. Хотя в статье упоминается только база данных PostgreSQL, работа с любой другой клиент-серверной базой данных SQL не будет сильно отличаться. Способ подключения не будет иметь большого значения — подключение через JDBC, ODBC или через собственный драйвер будет отличаться только в деталях.
Формы, напрямую связанные с базой данных, также могут быть созданы в OpenOffice. Затем такие формы также можно использовать в качестве программного инструмента для сбора данных. Хоть я и не довел свои эксперименты в этой области до финала и в итоге так и не создал никаких осмысленных форм и не использую их, мне удалось накопить некоторый опыт, который может привести к продолжению статей на эту тему в будущем.