咨询关于多选确定后的操作,该怎么解决
咨询关于多选确定后的操作
delphi 7
BDE
sqlserver2008
做了一个选择数据的窗口,进行多选后 点确定的时候将所选择的数据插入到数据库中 我写了一段代码
执行起来效率很低。比如选择框中有5000多条数据 选择2行点确定后 点等个几秒钟。我看过别的程序写的一样的功能。速度就非常快
下面是我写的代码 我是通过遍历数据集 获取选择的行就开始已插入 这样就需要将5000条记录都遍历一遍速度差。
有的网友告诉我要使用 记录行的方法来实现就快了。可是我不会
------解决思路----------------------
首尾分别加入
DBGrid1.DataSource.DataSet.DisableControls;
DBGrid1.DataSource.DataSet.EnableControls;
让界面DBGrid静默,可以加快速度。
------解决思路----------------------
这个嘛很,很简单的,你先把所有语句拼接起来,最后再执行;
sql:string;
begin
sql:=sql + 'insert .....;';
最后统一执行,这样就只用请求一次数据库了,你那个选多少条,就要请求多少次数据库
end;
------解决思路----------------------
这样吧,你建立动态数组,保存浏览时需要插入的数据行。
再通过For循环,将选择的数据行,通过SQL语句,分别插入指定表中。
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语句,分别插入指定表中。