有没有办法在delphi dbgrid中只更新/刷新一条记录?

时间:2010-02-22 13:39:41

标签: delphi refresh record dbgrid

有可能吗?怎么样?

5 个答案:

答案 0 :(得分:0)

取决于您与DBGrid链接的数据集。 TClientDataset可以。

答案 1 :(得分:0)

如果TDBGrid连接到内存数据集,您可以。您可以通过ID查询数据库中所选记录,同时使用您获得的结果(内存中)修改它(选定记录)。

答案 2 :(得分:0)

DBGrid中DataSource的DataSet是什么?

如果您正在使用ADOConnection,并使用ADOTable或ADOQuery作为DataSet,那么您可以尝试以下脚本:

ADOTable1.close;
ADOTable1.open;

ADOQuery1.close;
ADOQuery1.open;

上面的那些脚本将刷新整个DBGrid。

只要我知道,现在有办法在DBGrid中刷新一条记录。如我错了请纠正我。 :)

答案 3 :(得分:0)

您需要在刷新之前保存ID,然后通过将光标放在旧的Record中来找到相同的ID。像这样:

procedure TForm1.refreshQuery;
var
   oldID: integer;
begin
   oldID :=query1Id_table.AsInteger;
   query1.Refresh;
   //or if refresh not works
   //query1.close;
   //query1.open;
   query1.Locate('Id_table',oldID,[]);
end; 

或取决于DataSet,请查看此功能是否起作用:

query1.RefreshCurrentRow;

答案 4 :(得分:0)

您可以使用输入框询问特定的获取值,以查找要编辑的内容,然后可以使用locate函数找到它,如果找到,则进行编辑和发布

Var
    sRegisterNo, sAnswer : string;
Begin
    sAnswer := Inputbox('Registerno', 'Enter the user's registerNo you want to edit' , '' );

    With dmName do
    Begin
        sRegisterNo := tblMembers['RegisterNo'];

        If sRegisterNo.locate(sAnswer,  'sRegisterNo') =  True then
        Begin
            tblMembers.edit;
            // Use edits to give the new values 
            // Ex. EdtRegisterno.text := RE001;
            tblMembers.post
        End;
    End;
End;