0

一旦我通过 SQL 更新语句更改了一些字段数据,我需要看到它反映在 DBGrid 中,我不确定我正在做的正确方法是否正确 -> IBTable.Refresh。无论如何,它暂时有效,但是第一次刷新尝试后DBGrid的垂直滚动条移动到底部,如果我更新然后再次刷新,垂直滚动条变小并移动到DBGrid的中间。我不知道如何通过在 DBGrid 本身中更改它来直接更新某个字段中的值,如果有人向我展示如何使用它的示例,我将不胜感激。

如何在发出 IBTable.Refresh 后将 DBgrid 的垂直滚动条移动到顶部位置并选择最顶行?

我的代码很简单,因为我仍在学习数据库(Firebird)和 Delphi 以及使用示例 EMPLOYEE 数据库:

procedure TForm1.Button1Click(Sender: TObject);
begin
  //open IBQuery1, SQL command is in the component itself
  IBQuery1.Open;
  Label1.Caption := 'Tokyo''s budget was $' + TCaption(IBQuery1.FieldValues['BUDGET']);
  //clear all SQL commands as it's TStrings and remembers prev. added lines
  IBUpdateSQL1.ModifySQL.Clear;
  //start building the SQL update statement
  IBUpdateSQL1.ModifySQL.Append('update DEPARTMENT');
  if IBQuery1.FieldValues['BUDGET'] = '30000' then
    IBUpdateSQL1.ModifySQL.Append('set BUDGET = 500000')
  else
    IBUpdateSQL1.ModifySQL.Append('set BUDGET = 30000');
  IBUpdateSQL1.ModifySQL.Append('where LOCATION = ''Tokyo''');
  //execute SQL update
  IBUpdateSQL1.ExecSQL(ukModify);
  //close IBQuery1
  IBQuery1.Close;
  //let's see new field data
  IBTable1.Refresh;
end;

我正在做的是从 select 语句中读取一些字段数据,并将其相应地更改为另一个值,反之亦然。

谢谢

4

1 回答 1

0

“我不知道如何通过在 DBGrid 本身中更改它来直接更新某个字段中的值,如果有人向我展示如何操作的示例,我将不胜感激。”

不用担心。试试这个简单的配置。

在您的表单上放置以下控件。

  1. TIBDatabase(工具面板 - Interbase)
  2. TIBTransaction(工具面板 - Interbase)
  3. TIBQuery(工具面板 - Interbase)
  4. TDataSetProvider(工具面板 - 数据访问)
  5. TClientDataSet(工具面板 - 数据访问)
  6. TDataSource(工具面板 - 数据访问)
  7. TDBGrid(工具面板 - 数据控件)
  8. TButton(工具调色板 - 标准)

现在让我们把它们连接起来。使用 Object Inspector 设置一些属性,以便控件一起工作,就像这样。

  1. IBDatabase1:设置DefaultTransaction为 IBTransaction1(在对象检查器中使用下拉列表)
  2. IBTransaction1:设置DefaultDatabase为 IBDatabase1
  3. IBQuery1:设置Database为 IBDatabase1
  4. IBQuery1:设置Transaction为 IBTransaction1
  5. DataSetProvider1:设置DataSet为 IBQuery1
  6. ClientDataSet1:设置ProviderName为 DataSetProvider1
  7. DataSource1:设置DataSet为 ClientDataSet1
  8. DBGrid1:设置DataSource为 DataSource1

现在设置一些特定于您的数据库的其他属性

  1. IBDatabase1:设置DatabaseName,,,LoginPromptParams
  2. IBQuery1:设置SQL

现在激活一些控件。您可以在设计时使用 Object Inspector 执行此操作,也可以编写等效代码(例如IBDatabase1.Connected := True)并将其放置在按钮的单击事件中(如果您愿意)。

  1. 连接您的数据库(设置IBDatabase1.Connected为 True)
  2. 激活您的查询(设置IBQuery1.Active为 True)
  3. 激活您的 ClientDataSet(设置ClientDataSet1.Active为 True)

现在(除了小问题)您的 DBGrid 中应该有一个完全可编辑的数据集。只需单击此处并编辑您喜欢的任何内容。如果将以下代码写入另一个按钮的单击事件,则只需保存更改即可。

ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);

这不是唯一的方法,还有很大的改进空间,但现在你应该有一个好的起点,可以从你选择的任何方向前进。

于 2013-10-24T03:08:16.817 回答