Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使Access数据库字段结构更改传播到Delphi应用程序_Ms Access_Delphi_Delphi 2007_Ms Access 2000 - Fatal编程技术网

Ms access 使Access数据库字段结构更改传播到Delphi应用程序

Ms access 使Access数据库字段结构更改传播到Delphi应用程序,ms-access,delphi,delphi-2007,ms-access-2000,Ms Access,Delphi,Delphi 2007,Ms Access 2000,我有一个与Access 2000数据库交互的Delphi 2007应用程序。我已经对数据库结构进行了更改(添加了字段),需要使它们在Delphi应用程序中可见,但事实证明这很困难。我做了一个最小的Delphi应用程序和Access数据库,同样的问题也出现了 我的步骤是: 使用字段1和字段2创建Access数据库 使用设置/控制面板/管理工具/数据源(ODBC 32位)为MS数据库创建别名 创建一个Delphi应用程序 在表单中添加TDBGrid 在表单中添加TDataSource 将网格的Da

我有一个与Access 2000数据库交互的Delphi 2007应用程序。我已经对数据库结构进行了更改(添加了字段),需要使它们在Delphi应用程序中可见,但事实证明这很困难。我做了一个最小的Delphi应用程序和Access数据库,同样的问题也出现了

我的步骤是:

  • 使用字段1和字段2创建Access数据库
  • 使用设置/控制面板/管理工具/数据源(ODBC 32位)为MS数据库创建别名
  • 创建一个Delphi应用程序
  • 在表单中添加
    TDBGrid
  • 在表单中添加
    TDataSource
  • 将网格的
    Datasource
    属性设置为
    DataSource1
  • 在表单中添加一个
    t表
  • TDataSource
    Dataset
    属性设置为
    Table1
  • Table1
    DataBaseName
    属性设置为为数据库创建的别名
  • TableName
    属性设置为原始Access数据库中的表名
  • 将表的
    Active
    属性设置为TRUE。最初在数据库中定义的所有字段都显示在网格中。 问题是我想在以后添加字段。我可以通过从头开始重建整个内容,使它们在网格中显示为列,但必须有一种更简单的方法
强制数据库结构更改通过DelphiIDE和生成的应用程序的公认最佳实践是什么

**对肯·怀特评论的回答**

谢谢你,肯。当您可能不需要网格中的所有字段时,我理解使用
DBGrid
属性的
Columns
的原因-我的问题是,当我使用MS Access向表中添加一些字段,然后重新打开我的Delphi项目时:

  • 如果断开
    TTable
    并重新连接,则
    FieldDefs
    属性将显示添加的字段。一切都好
  • 然后我转到TDBGrid。显示的列不显示其他字段,仅显示原始字段。
    集合为空
  • 当我检查
    属性并尝试添加所有字段时,我只得到原始字段。如果我尝试添加一个field`列,则picklist只提供可供选择的原始字段

我不明白为什么
TTable
可以看到新字段,但是
TDatasource
(它将TTable指定为
Dataset
属性值)不能看到新字段。

当您更改数据库结构时,最大限度地减少问题的方法是避免在Delphi应用程序的数据集中使用持久的TFields,并且,如果Delphi数据集类型是支持持久TFieldDefs的数据集类型,请避免使用这些类型。这两种类型的pesistent集合所能做的一切都不能在代码中完成,您可以使代码适应底层数据集结构的更改。但是,没有办法像您想象的那样强制进行更改。无法自动完成更改的原因是IDE无法知道您是否希望包含新列。例如,创建持久化字段以在TDBGrid中使用以向用户显示,但不将表中的每一列都包含到该网格中以供显示,或者当您使用来自另一个应用程序的相关数据库时,该数据库包含您在应用程序中永远不会使用的列。您好,Ken,有问题的评论。