Внесение изменений в структуру поля базы данных Access распространяется на приложение Delphi

#ms-access #delphi #delphi-2007 #ms-access-2000

#ms-access #delphi #delphi-2007 #ms-access-2000

Вопрос:

У меня есть приложение Delphi 2007, которое взаимодействует с базой данных Access 2000. Я внес изменения в структуру базы данных (добавление полей), и мне нужно сделать их видимыми в приложении Delphi, но это оказывается сложным. Я создал минимальное приложение Delphi и базу данных Access, и там видна та же проблема.

Мои шаги были:

  • создайте базу данных Access с полями 1 и Field2
  • используйте Настройки / Панель управления / Административные инструменты / Источники данных (32-разрядный ODBC), чтобы создать псевдоним для базы данных MS.
  • создайте приложение Delphi.
  • добавьте a TDBGrid в форму
  • добавьте a TDataSource в форму
  • установите Datasource для свойства сетки значение DataSource1
  • добавьте a TTable в форму
  • установите Dataset свойство TDataSource для Table1
  • установите DataBaseName свойство Table1 для имени псевдонима, созданного для базы данных.
  • задайте TableName для свойства имя таблицы в исходной базе данных Access.
  • установите Active для свойства таблицы значение TRUE. Все поля, первоначально определенные в базе данных, отображаются в таблице. Проблема в том, что я хочу добавить поля позже к этому. Я могу сделать так, чтобы они отображались в виде столбцов в сетке, перестроив все с нуля, но должен быть более простой способ!

Какая принятая наилучшая практика для принудительного внесения изменений в структуру базы данных в среду IDE Delphi и результирующее приложение?

** Ответ на комментарий Кена Уайта **

Спасибо, Кен. Я ценю причины Columns свойства DBGrid , когда вам могут не понадобиться все поля в вашей сетке — моя проблема в том, что когда я использую MS Access для добавления некоторых полей в таблицу, а затем повторно открываю свой проект Delphi:

  • если я отключу TTable и повторно подключу его, FieldDefs свойство покажет добавленные поля. Все хорошо.
  • Затем я перехожу к TDBGrid. В отображаемых столбцах не отображаются дополнительные поля, только исходные. Columns Коллекция пуста.
  • когда я проверяю Columns свойство и пытаюсь добавить все поля, я просто получаю исходные поля. Если я попытаюсь добавить столбец «одно поле», список выбора предоставляет мне только исходные поля для выбора.

Я не понимаю, почему TTable они могут видеть новые поля, но TDatasource (в котором в качестве Dataset значения свойства указано значение TTable) не может.

Комментарии:

1. Способ минимизировать проблемы при изменении структуры базы данных — избегать использования постоянных полей TF в наборах данных в приложении Delphi, и, если тип набора данных Delphi поддерживает постоянные TFieldDefs, избегайте их использования. Эти два типа постоянных коллекций не могут делать ничего такого, чего нельзя было бы сделать в коде, и вы можете сделать код адаптируемым к изменениям в базовой структуре набора данных. Но нет способа принудительно внести изменения, как вы, кажется, предполагаете.

2. Причина, по которой это не может быть сделано автоматически, заключается в том, что IDE не имеет возможности узнать, хотите ли вы включить новые столбцы или нет. Например, часто создается постоянное поле для использования в TDBGrid для отображения пользователю, но не включает каждый столбец таблицы в эту сетку для отображения, или когда вы используете связанную базу данных из другого приложения, которая включает столбцы, которые вы никогда не будете использовать в своем приложении.

3. Привет, Кен, комментарии под вопросом.