我用的是 ACCESS数据库。其中有这样一种问题:for i:=0 to 100 do
begin
for j:=0 to 1000 do
begin
AdoQuery1.close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('insert into tbtable1(vcname) values( val)');
AdoQuery1.Parameters.ParamByName('val').value:=edit1.text;
AdoQuery1.Prepared;
AdoQuery1.ExecSQL;
end;
end;在循环中我多次开关了adoquery,请问用什么办法可以提高我的这个效率吗?
请各位大侠不吝赐教!
begin
for j:=0 to 1000 do
begin
AdoQuery1.close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('insert into tbtable1(vcname) values( val)');
AdoQuery1.Parameters.ParamByName('val').value:=edit1.text;
AdoQuery1.Prepared;
AdoQuery1.ExecSQL;
end;
end;在循环中我多次开关了adoquery,请问用什么办法可以提高我的这个效率吗?
请各位大侠不吝赐教!
解决方案 »
- Delphi 控件问题
- TChart分页的问题,在线等!!!!!!!
- 如何得到当前运行的文件的绝对目录?
- 如何把查询的某项按照拼音排序??
- 谁有INDY9.0,3ks
- 开发的新组件的使用问题
- 雍正皇帝支持者进来签名!
- install shield 中怎样调用dll中的函数?
- http://kingron.myetang.com/进不去了,那还有《猛科》下载啊
- 新装一台服务器,操作系统是NT4.0,打完补丁5后,重起机,系统已检测到操作系统打了补丁5,控制面板中也可以看到补丁5,但开始菜单中始终不出现,为什么?(目前只能给40分,不好意思!))
- 一个很初级的问题, 请问当使用DBGrid时, 如何获取当前点击行的Row?
- 你能解决吗?马上送分!Fatal Error
ADOQuery1.LockType := ltBatchOptimistic;
ADOQeury1.SQL.Clear;
ADOQuery1.SQL.ADD('SELECT TOP 0 vcname from tbtablel')
ADOQuery1.Open;
for i:=0 to 100 do
begin
for j:=0 to 1000 do
begin
ADOQuery1.Append;
ADOQuery1.FieldByName('val').value:=edit1.text;
ADOQuery1.Post
end;
end;
ADOQuery1.UpdateBatch;
with ADODataSet1 do begin
CursorLocation := clUseClient;
CursorType := ctStatic;
LockType := ltBatchOptimistic;
CommandType := cmdText;
CommandText := 'SELECT * FROM Employee';
Open;
end;
。
ADODataSet1.UpdateBatch(arCurrent);
他的可以解决你的问题
我现在做 insert into tbtable1(vc1,vc2,vc3,vc4) values(val1,val2,val3,val4)请问:ADOQuery1.SQL.ADD('SELECT TOP 0 vcname from tbtablel')
这句该怎么写呢?谢谢。
ADOQuery1.SQL.ADD('SELECT TOP 0 vc1,vc2,vc3,vc4 from tbtablel')
我不是很清楚这种做法,
我是这样做的:with ADODataSet1 do
begin
CursorLocation := clUseClient;
CursorType := ctStatic;
LockType := ltBatchOptimistic;
CommandType := cmdText;
end;for i:=0 to 100 do
begin
for j:=0 to 1000 do
begin
ADODataSet1.CommandText := 'insert into tbtable1 (vc1,vc2,vc3,vc4) '+
'values(val1,val2,val3,val4)';
ADODataSet1.Parameters.ParamByName('val1').value:=edit1.text;
ADODataSet1.Parameters.ParamByName('val2').value:=edit2.text;
ADODataSet1.Parameters.ParamByName('val3').value:=edit3.text;
ADODataSet1.Parameters.ParamByName('val4').value:=edit4.text;
ADODataSet1.Open;
end;
end;ADODataSet1.UpdateBatch(arCurrent);
请问是这样的吗?但是在运行的时候说 :Parameter ‘val1' not found.
请问我错在什么地方了呢?还请多多指教。:)
应为
ADODataSet1.Parameters.ParamByName(':val1').value:=edit1.text;
其余类同
select 子句包含一个保留字,拼写错误,或丢失的参数,或标点符号不正确。ADOQuery1.SQL.ADD('SELECT TOP 0 vc1,vc2,vc3,vc4 from tbtablel');
ADOQuery1.Open;
运行到这里就出上面的那个错误。
请问是什么问题呢?谢谢。。
不好意思。我刚才照
ADODataSet1.Parameters.ParamByName(':val1').value:=edit1.text;
调试了一下,还是会出以上的Parameter ‘val1' not found 的问题。
不知道是不是以下这句有问题:
ADODataSet1.CommandText := 'insert into tbtable1 (vc1,vc2,vc3,vc4) '+
'values(val1,val2,val3,val4)';
我在val1改为:val1也是同样的问题。
我在access 中的查询中:select top 10 from tbtable1 也select 子句包含一个保留字,拼写错误,或丢失的参数,或标点符号不正确。这个问题。所以可能是access不支持这个语法。
非常谢谢你。我看看不要这个top 0可不可以。。
ADODataSet1.CommandText := 'insert into tbtable1 (vc1,vc2,vc3,vc4) '+
'values(:val1,:val2,:val3,:val4)';
ADODataSet1.Parameters.ParamByName('val1').value:=edit1.text;
ADODataSet1.Parameters.ParamByName('val2').value:=edit2.text;
ADODataSet1.Parameters.ParamByName('val3').value:=edit3.text;
ADODataSet1.Parameters.ParamByName('val4').value:=edit4.text;
'values(:val1,:val2,:val3,:val4)';
还是不能运行。:)
谢谢你啊
用append,post的方式,效率差不多,我插入15000多条记录都要一分多钟。
至于第二种方式,我没有得出要领。我看了一下李维的那本ado/mts/com。有关于UPDATEBATCH的技术说明,好象收获不大。
AdoQuery1.SQL.Clear;
AdoQuery1.close;
for i:=0 to 100 do
begin
for j:=0 to 1000 do
begin
// AdoQuery1.close;
// AdoQuery1.SQL.Clear;
// AdoQuery1.SQL.Add('insert into tbtable1(vcname) values( val)');
// AdoQuery1.Parameters.ParamByName('val').value:=edit1.text;
AdoQuery1.SQL.Add('insert into tbtable1(vcname) values('' +edit1.text + ''') ';
// AdoQuery1.Prepared;
// AdoQuery1.ExecSQL;
end;
end;
AdoQuery1.Prepared;
AdoQuery1.ExecSQL; //只做一次执行
AdoQuery1.SQL.Clear;
AdoQuery1.close;
for i:=0 to 100 do
begin
for j:=0 to 1000 do
begin
AdoQuery1.SQL.Add('insert into tbtable1(vcname) values('' +edit1.text + ''') ';
end;
end;
AdoQuery1.Prepared;
AdoQuery1.ExecSQL; //只做一次执行
呵呵,兄弟,你这样不行,一:只插入一条记录。二:虽然只插入一条,但是也花费80多秒。