下面三个过程,分别是对数据库作读出和写入操作从数据库读出
procedure TMainForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
  TreeNodeText:String;
  sSql:string;
begin
  TreeNodeText:=TreeView1.Selected.Text;  try
    sSql:='select * from Soft';    With DM.ADOQuery1 do
    begin
      Close;
      Sql.Clear;
      Sql.Add(sSql);
      Open;
      while not EOF do
begin
Name:=fieldByname('SoftName').value; //name是全局变量
      end;
    end;
  except
    showmessage('写入SoftInfo失败');
  end;
end;
向数据库插入一个记录1
procedure TAddForm1.btIntoDBClick1(Sender: TObject);
  sSql:String;
begin
  try
    //添加到数据库
    With DM.ADOQuery1 do
    begin
      Close;
      Sql.Clear;
      sSql:='insert into SoftDB.Soft (SoftName) values ('''+EditName.Text+''')';
      Sql.Add(sSql);
      ExecSQL;
      
      MainForm1.TreeView1Change(Sender,MainForm1.TreeView1.Selected); 
    end;
  except
    ShowMessage('添加失败');
  end;
end;这样向数据库插入一个记录2
procedure TAddForm1.btIntoDBClick2(Sender: TObject);
  sSql:String;
begin
  try
    //添加到数据库
    With DM.ADOQuery1 do
    begin
      Close;
      Sql.Clear;
      sSql:='insert into SoftDB.Soft (SoftName) values ('''+EditName.Text+''')';
      Sql.Add(sSql);
      ExecSQL;      DM.ADOConnection1.Close; 
      DM.ADOConnection1.Open;  
      
      MainForm1.TreeView1Change(Sender,MainForm1.TreeView1.Selected);
    end;
  except
    ShowMessage('添加失败');
  end;
end;现在在一个OnButtonClick事件中调用如果这样调用
procedure TMainForm1.ButtonClickSender: TObject);
begin
btIntoDBClick1(Sender);
end;却找不到刚插入的这条记录,而这样
procedure TMainForm1.ButtonClickSender: TObject);
begin
btIntoDBClick2(Sender);
end;
  
就可以了
  
但我考虑到频繁打开关闭连接,效率可能变得比较低,请问这是什么原因,能不能通过别的方法实现,或者这样大概会有多大的效率损失