请问当想数据库插入新记录的时候如何使DBGrid 立刻更新显示刚刚添加的记录?

时间:2021-12-21 21:48:16
我用的是2个TQuery1,2
TQuery1 负责insert,
TQuery2 负责显示数据库表,在主窗口上面添加一个DbGrid1,然后在添加几个edit用来储存数据,当点击按钮“Insert”后,把新记录添加到数据库里面,现在我想实现当点击Insert按钮后下面的DBGrid也立刻更新显示,请问如何做。

×××××××××××添加部分××××××××××
   CustomerData->Query1->SQL->Clear();
   CustomerData->Query1->SQL->Add("insert into test (name,age,comment) Values(:Name,:Age,:Comment)");
   CustomerData->Query1->ParamByName("Name")->AsString=Edit1->Text;
   CustomerData->Query1->ParamByName("Age")->AsInteger=StrToInt(Edit2->Text);
   CustomerData->Query1->ParamByName("Comment")->AsString=Memo1->Text;

   CustomerData->Query1->ExecSQL();

  现在我想更新显示,我应该在后面添加什么呢?我添加了
  DBGrid1->Refresh();
或者Repaint();都不型啊。请问如何做呢? DBGrid是与DataSource2联系的,DataSource2又与Query2联系的,Query2的sql string是:select * from test;

但是只能显示刚开始运行的记录,添加后不能更新显示,请问如何改啊??

4 个解决方案

#1


断开,再重新连接!

#2


因为你的DBgrid显示的是最初刚打开时的数据,而在你插入之后,没有刷新,只需在你的添加代码的之后加上一段刷新的代码,也就是说,在执行完插入之后,立即刷新一下,让Query2重新从数据库中select最新的数据。
×××××××××××添加部分××××××××××
   CustomerData->Query1->SQL->Clear();
   CustomerData->Query1->SQL->Add("insert into test (name,age,comment) Values(:Name,:Age,:Comment)");
   CustomerData->Query1->ParamByName("Name")->AsString=Edit1->Text;
   CustomerData->Query1->ParamByName("Age")->AsInteger=StrToInt(Edit2->Text);
   CustomerData->Query1->ParamByName("Comment")->AsString=Memo1->Text;

   CustomerData->Query1->ExecSQL();
/* 加上下面一段代码即可*/
   CustomerData->Query2->Close();
   CustomerData->Query2->SQL->Clear();
   CustomerData->Query2->SQL->Add("select * from text");
   CustomerData->Query2->Open();
   Edit1->Text="";
    Edit2->Text="";
    Memo1->Text="";
    ShowMessage("添加成功");
   

#3


用SQL语句增加记录就是要刷新才能看动,为何不这样呢:
   Query1->Append();
   Query1->FieldByName("字段")->AsString="asdsadsa";
   Query1->Post();
这样就能直接看到了!

#4


添加的和显示的要同一个数据集!你的DBGrid1的数据源是指向那个数据集的!

#1


断开,再重新连接!

#2


因为你的DBgrid显示的是最初刚打开时的数据,而在你插入之后,没有刷新,只需在你的添加代码的之后加上一段刷新的代码,也就是说,在执行完插入之后,立即刷新一下,让Query2重新从数据库中select最新的数据。
×××××××××××添加部分××××××××××
   CustomerData->Query1->SQL->Clear();
   CustomerData->Query1->SQL->Add("insert into test (name,age,comment) Values(:Name,:Age,:Comment)");
   CustomerData->Query1->ParamByName("Name")->AsString=Edit1->Text;
   CustomerData->Query1->ParamByName("Age")->AsInteger=StrToInt(Edit2->Text);
   CustomerData->Query1->ParamByName("Comment")->AsString=Memo1->Text;

   CustomerData->Query1->ExecSQL();
/* 加上下面一段代码即可*/
   CustomerData->Query2->Close();
   CustomerData->Query2->SQL->Clear();
   CustomerData->Query2->SQL->Add("select * from text");
   CustomerData->Query2->Open();
   Edit1->Text="";
    Edit2->Text="";
    Memo1->Text="";
    ShowMessage("添加成功");
   

#3


用SQL语句增加记录就是要刷新才能看动,为何不这样呢:
   Query1->Append();
   Query1->FieldByName("字段")->AsString="asdsadsa";
   Query1->Post();
这样就能直接看到了!

#4


添加的和显示的要同一个数据集!你的DBGrid1的数据源是指向那个数据集的!