Delphi - Сетевая база данных ODBC (MS Access) - PullRequest
1 голос
/ 01 мая 2009

У меня есть программа базы данных, которая использует MS Access. Время пришло, и мне нужно сделать его клиент-серверным приложением. Идея этой схемы заключается в следующем: сервер содержит базу данных, и один или несколько клиентов должны получить к ней доступ одновременно. Программа по-прежнему должна работать в среде Ms Access (поскольку о переносе БД и переписывании приложения не может быть и речи).

Еще одна схема, которая, честно говоря, мне не очень нравится, - это когда клиенты запрашивают файл БД с сервера, передают его по локальной сети и получают к нему локальный доступ ... но клиенты могут вносить в него изменения, поэтому неэффективна.

Теперь мой вопрос: как правильно это осуществить. А как получить доступ к сетевой базе данных? Сделайте его общедоступным, или вы можете использовать Indy и все такое.

Ответы [ 8 ]

1 голос
/ 01 мая 2009

Для совместного использования базы данных доступа просто поместите файл * .MDB в общий сетевой ресурс и откройте его по всей сети. Я использую эту технику для примерно 15 пользователей сети, выходя за рамки этого или на места с большим трафиком, я перехожу на SQL Server.

Миграция на SQLServer - очень простая задача, особенно если вы используете компоненты dbGO (ADO), поскольку все, что потребуется, - это изменить строку подключения, чтобы она указала на экземпляр SQL Server. Единственная проблема, с которой я столкнулся при таком преобразовании, была с логическими полями. При доступе эти поля имеют внутреннее представление 0 или -1, а в SQL Server они имеют внутреннее представление 0 или 1. В Access они разрешаются как логические, в SQL Server - нет. Например, следующий запрос не выполняется в SQL Server:

SELECT * FROM TABLE WHERE BOOLFIELD

это должно быть переписано как:

SELECT * FROM TABLE WHERE BOOLFIELD <> 0

Все остальные мои запросы работают должным образом ... за исключением даты и времени, которые я предлагаю передавать в качестве параметров и разрешать драйверу обрабатывать перевод.

Процесс преобразования довольно прост. Используйте инструмент миграции, чтобы перенести базу данных доступа на SQL Server, а затем используйте базу данных сценариев SQL Server, чтобы создать сценарий для вас. Либо предоставьте этот сценарий своим клиентам для развертывания, сделайте это самостоятельно в каждом месте или напишите программу для анализа и выполнения каждой команды как прочитанной из файла.

Вы можете перенести данные из одной базы данных в другую через SQLServer, используя метод OpenDataSource , а затем выполнить вставку в базу данных доступа.

INSERT INTO TABLE FROM 
  OpenDataSource('Microsoft.Jet.OLEDB.4.0','Access.mdb')...TABLE

Другой вариант - перейти на N-уровень. Если у вас есть корпоративная версия Delphi, то нетрудно перенести систему на истинное n-уровневое решение с использованием TClientDatasets и написанием нескольких серверных функций. Конечно, пробег будет во многом зависеть от текущего макета вашего приложения и от сложности системы.

1 голос
/ 01 мая 2009

Если вы используете базу данных с контролем ODBC в Delphi, вам не нужно беспокоиться о портировании AP и DB (ну, возможно, нужно исправить небольшую проблему). ODBC создает все базы данных, используя один и тот же интерфейс, поэтому вы можете просто изменить строку подключения имени источника данных (DSN) на удаленный сервер с помощью acc / pw для входа в систему, и тогда все должно работать. Также он может работать нормально, даже если вы измените Access на другую систему ODBC, например MySQL, с небольшими изменениями команд SQL.

Итак, вернемся к вашему вопросу. Использование файла на сервере приведет к неудаче, когда ваш пользователь вырастет больше, чем, ну, в общем, 2. При одновременном доступе к базе данных для нескольких пользователей вам потребуется поведение транзакции (или атомарного) на стороне БД, которого нет в Access. Только настоящий сервер БД, такой как MySQL, MSSQL или Oracle / DB2 / ..., может сделать это.

Не открывайте общий файл базы данных. Используйте настоящий сервер базы данных, если у вас только один клиент.

1 голос
/ 01 мая 2009

Файловые базы данных, такие как Access, по сути являются однопользовательскими. Вы можете поделиться ими, но вы открываете себя миру коррумпированных баз данных и боли. Если у вас многопользовательское приложение, вам нужна многопользовательская серверная база данных.

0 голосов
/ 07 мая 2009

Я проверял MSSQL Server, и для 2005, и для 2008 требовался .NET Framework для работы. Какие другие системы баз данных, которые совместимы с ADO, доступны (не файловые БД)

0 голосов
/ 05 мая 2009

Если ваши пользователи широко распространены по Интернету и вы не хотите использовать общий файловый ресурс, одним из вариантов является использование EQL Data для синхронизации нескольких копий базы данных. Это также помогает публиковать таблицы в Интернете.

0 голосов
/ 01 мая 2009

Иногда переходить с одной БД на другую очень легко. Я очень легко перехожу с Access на Firebird (думаю, что Firebird лучше , чем MySQL для Delphi)

Инструменты, которые я использую: http://www.clevercomponents.com/products/dbcomparer/dbcomparer.asp

0 голосов
/ 01 мая 2009

Мое решение: используйте что-то вроде RemObjects SDK, чтобы определить интерфейс, который приложения вызывают для получения данных из базы данных. Возможно, у вас есть модуль данных или что-то, что уже определяет необходимые вызовы, но это может помочь привести в порядок ваше приложение. Затем вы можете получить доступ к данным удаленно, используя ваше приложение, и при этом получить доступ к базе данных Access. Когда это подходит, вы можете перенести данные на что-то другое, и вам вообще не придется менять клиентов, поскольку они теперь используют интерфейс и не заботятся о реализации.

Они также используют систему удаленного доступа к данным, но я уклоняюсь от этого, поскольку она не соответствует моим потребностям. Хотя стоит посмотреть.

0 голосов
/ 01 мая 2009

Почему при переносе БД необходимо переписать приложение?

Как насчет использования Помощник по миграции SQL Server для миграции базы данных MS Access на SQL Server?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...