咨询关于多选确定后的操作,该怎么解决

咨询关于多选确定后的操作
delphi 7
BDE 
sqlserver2008
做了一个选择数据的窗口,进行多选后 点确定的时候将所选择的数据插入到数据库中 我写了一段代码
执行起来效率很低。比如选择框中有5000多条数据 选择2行点确定后 点等个几秒钟。我看过别的程序写的一样的功能。速度就非常快  
下面是我写的代码 我是通过遍历数据集 获取选择的行就开始已插入 这样就需要将5000条记录都遍历一遍速度差。
有的网友告诉我要使用 记录行的方法来实现就快了。可是我不会

procedure TFrmselzl.BitBtn1Click(Sender: TObject);
begin
 if dbgrid1.selectedrows.Count =0 then
  begin
    application.MessageBox('请选择数据','系统提示',mb_iconinformation or mb_ok)
  end
  else
    begin
    with Query1 do
          begin
              First;
              while not Eof do
              begin
                if DBGrid1.selectedrows.CurrentRowSelected then
                begin
                  If Qryint.active then Qryint.Close ;
                  Qryint.Sql.Clear ;
                  Qryint.Sql.Add('Insert  into mxb');
                  Qryint.SQL.Add('(bh,id,sl)');
                  Qryint.Sql.Add('Values (:bh,:id,:sl)' );
                  Qryint.ParamByName('bh').asstring :=DBGrid1.DataSource.DataSet.FieldByName('bh').asstring ;
                  Qryint.ParamByName('id').asstring :=DBGrid1.DataSource.DataSet.FieldByName('id').asstring ;
                  Qryint.ParamByName('sl').Asinteger :=DBGrid1.DataSource.DataSet.FieldByName('sl').Asinteger ;
                  Qryint.ExecSQL ;
               end;
                Next;
              end;
         end ;
    application.MessageBox('维护成功!','系统提示',mb_iconinformation or mb_ok)
   end ;
 
end;


------解决思路----------------------
首尾分别加入
DBGrid1.DataSource.DataSet.DisableControls;
DBGrid1.DataSource.DataSet.EnableControls;
让界面DBGrid静默,可以加快速度。

procedure TFrmselzl.BitBtn1Click(Sender: TObject);
begin
  if dbgrid1.selectedrows.Count =0 then
  begin
    application.MessageBox('请选择数据','系统提示',mb_iconinformation or mb_ok)
  end
  else begin
    with Query1 do
    begin
      DBGrid1.DataSource.DataSet.DisableControls;
      First;
      while not Eof do
      begin
        if DBGrid1.selectedrows.CurrentRowSelected then
        begin
          If Qryint.active then Qryint.Close ;
          Qryint.Sql.Clear ;
          Qryint.Sql.Add('Insert  into mxb');
          Qryint.SQL.Add('(bh,id,sl)');
          Qryint.Sql.Add('Values (:bh,:id,:sl)' );
          Qryint.ParamByName('bh').asstring :=DBGrid1.DataSource.DataSet.FieldByName('bh').asstring ;
          Qryint.ParamByName('id').asstring :=DBGrid1.DataSource.DataSet.FieldByName('id').asstring ;
          Qryint.ParamByName('sl').Asinteger :=DBGrid1.DataSource.DataSet.FieldByName('sl').Asinteger ;
          Qryint.ExecSQL ;
        end;
        Next;
        end;
      end ;
      DBGrid1.DataSource.DataSet.EnableControls;
      application.MessageBox('维护成功!','系统提示',mb_iconinformation or mb_ok)
    end; 
  end ;
end;

------解决思路----------------------
这个嘛很,很简单的,你先把所有语句拼接起来,最后再执行;
sql:string;
begin
sql:=sql + 'insert .....;';
最后统一执行,这样就只用请求一次数据库了,你那个选多少条,就要请求多少次数据库
end;
------解决思路----------------------
这样吧,你建立动态数组,保存浏览时需要插入的数据行。
再通过For循环,将选择的数据行,通过SQL语句,分别插入指定表中。