2012-02-06 3 views
1

Я пытаюсь перенести приложение Delphi с помощью BDE с файлами данных DBF/MDX в DBExpress с использованием локальных файлов данных.Delphi: Миграция из BDE в учебник DBExpress

Простота замены компонентов TTable на TClientDataset привела к ошибкам, связанным с свойствами индекса.

Я разобрал его, и все, что я придумал, - это статья доктора Боба, которая не имеет упоминания об индексах и не демонстрирует, как использовать метод сортировки. Все остальные статьи были общими описаниями DBExpress без каких-либо подробностей, касающихся меня.

Есть ли какие-либо учебники/примеры шагов, которые следует выполнить?

+1

Ваш конкретный вопрос не имеет смысла. Почему вы заменяете TTable на ClientDataSet? Детально, что вы пытаетесь выполнить? Считаете ли вы, что TClientDataSet является компонентом Do All для замены TTable? Вы надеялись, что TClientDataSet сделает все, что вы хотите? Никто не может догадаться, что вы хотите здесь. Возможно, образец кода? Вы использовали BDE с файлами dBase? Пожалуйста, будьте ясны. –

+0

Я написал серию записей в блогах о преобразовании приложения BDE в dbExpress/Firebird. Вы можете посмотреть эту запись: http://nbnewman.blogspot.com/2009/09/using-dbexpress-conclusions.html –

+0

Я сделал видеоролик о миграции BDE для Code Rage III несколько лет назад http: // learndelphi .tv/index.php? option = com_content & view = article & id = 79 – Alister

ответ

1

IMHO, TTable и TClientDataSet - это очень разные методы доступа к данным. Я предложу 2 пути миграции:

  1. Как вы говорили о DBF/MDX, обратите внимание на базу данных Advantage и TAdsTable. Вы найдете его более совместимым с TTable, чем с TClientDataSet и dbExpress.
  2. Рассмотрите Anydac и его TADTable как путь миграции. TADTable выглядит как совместимая и быстрая замена TTable, а также другие функции Anydac.
+0

Это приложение используется некоммерческой организацией. Я бы предпочел использовать бесплатную базу данных. – ChuckO

+0

Вы можете использовать Anydac (коммерческий) со свободными db - Firebird, PostgreSQL, SQLite, SQL Server Express и т. Д. – GeorgeJ

1

К сожалению, локальные файлы TClientDataset не являются заменой BDE как локального механизма базы данных. По сути, они представляют собой массивы данных с памятью, способные сохранять данные на диске. Но им не хватает многих функций, которые вы можете найти в BDE. Если ваши потребности минимальны, они могут работать (вы можете определить индексы внутри свойства набора данных клиента TIndexDefs), но они могут быть не тем, что вам нужно.

Кроме того, TClientDataset не является компонентом, связанным с dbExpress. Фактически они были введены с MIDAS (позже переименованной в Datasnap) в качестве клиента (отсюда и название), аналогичного удаленному набору данных в многоуровневом приложении (возможность дискового хранилища позволяет отключать операции).

dbExpress - это уровень доступа к данным, который может работать с разными серверами баз данных через «драйверы», как это делают ODBC/BDE/OLEDB. Было принято решение иметь только однонаправленные наборы данных в dbExpress, повторно используя возможности кэширования/курсора уже существующего TClientDataset, чтобы обеспечить двунаправленный курсор и кеш. Если вы используете только TClientDataset, вы вообще не используете dbExpress, а TClientDataset может работать с любым набором данных, реализующим необходимые интерфейсы (включая BDE).

Вы должны посмотреть на альтернативы, такие как SQLite, Firebird (есть встроенная версия, если вам нужен только локальный доступ) или Postgres, если вы ищете небольшие и бесплатные движки (MySQL свободен, только если ваше приложение GPL), или есть несколько других движков, доступных из разделенных версий коммерческих (например, SQL Server Express и Oracle Express) или относительно дешевых.

+0

Есть ли какие-либо сравнения возможностей между этими альтернативами? – ChuckO

+0

Вы можете начать здесь: http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems, но вы действительно должны искать тот, который лучше всего подходит вашим потребностям. –

0

Существует причина, по которой вы не можете найти людей, которые это делают; это не просто плохая идея, возможно, это почти невозможно.

Я хотел бы предложить отказаться от идеи использования ClientDataSet, поскольку это не следует рассматривать как «единственную базу данных, в которой вам когда-либо понадобится», и подумайте об использовании либо IBObjects [commercial!], Либо Firebird [бесплатно ] или dbExpress + поддерживаемые компоненты SQL Db или Interbase Express (IBX), которые поставляются с Delphi.

Вы обнаружите, что вам нужно либо полное реляционное SQL-dbms, даже очень маленькое или легкое, чтобы заменить BDE и даже тот набор функций, с которым вы могли бы работать с таблицами dBase, Access или Paradox.

В этом случае usual tutorials отлично подходит для вашей ситуации.

Смежные вопросы