2013-10-23 43 views
0

当我通过SQL更新语句更改某些字段数据时,我需要看到它反映在DBGrid中,我不确定我正在做的正确方法是否正确 - > IBTable.Refresh。无论如何,它现在工作,但DBGrid的垂直滚动条移动到第一次刷新尝试后的底部,如果我更新,然后再次刷新,垂直滚动条变小,并移动到DBGrid的中间。我不知道如何直接通过在DBGrid中更改值来更新某个字段中的值,如果有人向我展示如何操作,我很感激。如何将DBgrid的滚动条移动到顶端(德尔福)

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

我的代码很简单,因为我使用例如员工数据库以及仍然在学习数据库(火鸟)和德尔福:

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语句读一些现场数据,并改变它相应地与其他值相反,反之亦然。

感谢

+0

欢迎来到SO!你有没有可以分享的UI代码?这只是按钮点击功能。 – Derek

+2

如何调用'IBTable1.First'? –

回答

0

“我不知道如何直接通过只是改变它在DBGrid的自身更新某些字段中的值,我很感激,如果有人告诉我的一个例子,如何给它。”

不用担心。改为尝试这种简单的配置。

将窗体上以下控件。

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

现在让我们来勾起来。使用对象检查器设置一些属性,以便控件一起工作,就像这样。

  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一些其他属性:设置DatabaseNameLoginPromptParams
  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); 

这不是做到这一点的唯一方法,而且有很多改进的余地,但现在你应该从你选择哪个方向前进一个很好的起点。