可是我只不过是打开同一个表呀, for i:=1 to 5000 do begin query1.active:=false; query1.sql.add('......'); query1.execsql; query1.active:=true; //处理数据...... ...... query1.active:=false; end;程序代码的大致就是这样的
上面 的代码有问题 在query1.sql.add('......');之前要加上query1.sql.clear不过问题好象不在这里,建议你改如下的写法 query1.close query1.sql.clear query1.sql.text := 'select * from yourtable' query1.openfor i:=1 to 5000 do begin query1.edit (or query1.insert) 给你要操作的各字段附值 query1.parambyname('字段名1').Value := .... .... query1.post; end
上面代码有点问题,更正如下 for i:=1 to 5000 do begin query1.insert) 给你要操作的各字段附值 query1.parambyname('字段名1').Value := .... .... query1.post; endquery1.first for i:=1 to query1.recordcount do begin query1.edit 给你要操作的各字段附值 query1.parambyname('字段名1').Value := .... .... query1.post query1.next end
你每次结束的时候,把connect Close
rikky(读书、心知、生活) 说得对,150循环以后,你的sql代码要重复执行多少次啊??
谢谢上面的两位,不过我的 sql.clear语句是有的,只不过我在上面漏掉了! 问题好像不在这儿
我的源代码如下: procedure TForm9.Tv1Change(Sender: TObject; Node: TTreeNode); var sqlstr:string; loca,i:integer; begin //try account:=account+1; for i:=0 to 11 do lv1.Items.item[i].subitems.clear; if tv1.Selected.Level =1 then with dm do begin loca:=pos(' ',tv1.selected.Text); id:=copy(tv1.selected.Text,1,loca -1); sqlstr:='select t1.*,t2.* from customer_publish t1 inner join '+ 'orders t2 on t1.cust_id =t2.cust_id where t2.order_id='+ id; qtree.close; qtree.sql.Clear; qtree.sql.add(sqlstr); qtree.execsql; qtree.Database.Open ; qtree.active:=true; lv1.Items.Item[0].subitems.add(qtree.fieldbyname('cust_name').asstring); lv1.Items.item[1].subitems.add(qtree.fieldbyname('receiver').asstring); lv1.Items.Item[2].SubItems.add(qtree.fieldbyname('linker').asstring); lv1.Items.Item[3].SubItems.add(qtree.fieldbyname('address').asstring); lv1.Items.Item[4].SubItems.add(qtree.fieldbyname('postcode').asstring); lv1.Items.Item[5].SubItems.add(qtree.fieldbyname('phone').asstring); lv1.Items.Item[6].SubItems.add(qtree.fieldbyname('fax').asstring); lv1.Items.Item[7].SubItems.add('------------------------------------'); lv1.Items.Item[8].SubItems.add(qtree.fieldbyname('start_magno').asstring+' 至 '+qtree.fieldbyname('end_magno').asstring); lv1.Items.Item[9].SubItems.add(qtree.fieldbyname('start_date').asstring+' 至 '+qtree.fieldbyname('end_date').asstring); lv1.Items.Item[10].SubItems.add(qtree.fieldbyname('order_count').asstring); if qtree.fieldbyname('Ispresent').asboolean=true then lv1.Items.Item[11].SubItems.add('是') else lv1.Items.Item[11].SubItems.add('否'); lv1.Refresh ; qtree.Close; qtree.Database.Close; end else begin for i:=0 to 11 do lv1.Items.item[i].subitems.clear; tv1.Refresh; end; {except showmessage(inttostr(account)); end;} end;
大概看了一下,这段代码就是这么个结构 try account := account + 1; for i := 0 to ll do 循环; if 条件满足 then begin 数据处理; end else begin for i := 0 to ll do 循环; end; except 抛出异常; end; 有些地方不明白,你说你是在循环执行同一张表的查询,可是这个循环在什么地方。对那张表的 查询应该是在if...else里面吧,可是if...else不是循环执行的,在代码里只执行了一次。 你是不是在循环调用TForm9.tvlchange事件呀? 还有就是tvl和lvl是什么控件?请说明一下,再有就是代码里面一般不要写 if 布尔值 = true then 应该直接写 if 布尔值 then
是不是Access不支持一次打开这么多表呀
for i:=1 to 5000 do
begin
query1.active:=false;
query1.sql.add('......');
query1.execsql;
query1.active:=true;
//处理数据......
......
query1.active:=false;
end;程序代码的大致就是这样的
在query1.sql.add('......');之前要加上query1.sql.clear不过问题好象不在这里,建议你改如下的写法
query1.close
query1.sql.clear
query1.sql.text := 'select * from yourtable'
query1.openfor i:=1 to 5000 do
begin
query1.edit (or query1.insert)
给你要操作的各字段附值
query1.parambyname('字段名1').Value := ....
....
query1.post;
end
for i:=1 to 5000 do
begin
query1.insert)
给你要操作的各字段附值
query1.parambyname('字段名1').Value := ....
....
query1.post;
endquery1.first
for i:=1 to query1.recordcount do
begin
query1.edit
给你要操作的各字段附值
query1.parambyname('字段名1').Value := ....
....
query1.post query1.next
end
问题好像不在这儿
procedure TForm9.Tv1Change(Sender: TObject; Node: TTreeNode);
var
sqlstr:string;
loca,i:integer;
begin
//try
account:=account+1;
for i:=0 to 11 do lv1.Items.item[i].subitems.clear;
if tv1.Selected.Level =1 then
with dm do begin
loca:=pos(' ',tv1.selected.Text);
id:=copy(tv1.selected.Text,1,loca -1);
sqlstr:='select t1.*,t2.* from customer_publish t1 inner join '+
'orders t2 on t1.cust_id =t2.cust_id where t2.order_id='+ id;
qtree.close;
qtree.sql.Clear;
qtree.sql.add(sqlstr);
qtree.execsql;
qtree.Database.Open ;
qtree.active:=true;
lv1.Items.Item[0].subitems.add(qtree.fieldbyname('cust_name').asstring);
lv1.Items.item[1].subitems.add(qtree.fieldbyname('receiver').asstring);
lv1.Items.Item[2].SubItems.add(qtree.fieldbyname('linker').asstring);
lv1.Items.Item[3].SubItems.add(qtree.fieldbyname('address').asstring);
lv1.Items.Item[4].SubItems.add(qtree.fieldbyname('postcode').asstring);
lv1.Items.Item[5].SubItems.add(qtree.fieldbyname('phone').asstring);
lv1.Items.Item[6].SubItems.add(qtree.fieldbyname('fax').asstring);
lv1.Items.Item[7].SubItems.add('------------------------------------');
lv1.Items.Item[8].SubItems.add(qtree.fieldbyname('start_magno').asstring+' 至 '+qtree.fieldbyname('end_magno').asstring);
lv1.Items.Item[9].SubItems.add(qtree.fieldbyname('start_date').asstring+' 至 '+qtree.fieldbyname('end_date').asstring);
lv1.Items.Item[10].SubItems.add(qtree.fieldbyname('order_count').asstring);
if qtree.fieldbyname('Ispresent').asboolean=true then
lv1.Items.Item[11].SubItems.add('是')
else
lv1.Items.Item[11].SubItems.add('否');
lv1.Refresh ;
qtree.Close;
qtree.Database.Close;
end
else
begin
for i:=0 to 11 do lv1.Items.item[i].subitems.clear;
tv1.Refresh;
end;
{except
showmessage(inttostr(account));
end;}
end;
try
account := account + 1;
for i := 0 to ll do 循环;
if 条件满足 then
begin
数据处理;
end
else
begin
for i := 0 to ll do 循环;
end;
except
抛出异常;
end;
有些地方不明白,你说你是在循环执行同一张表的查询,可是这个循环在什么地方。对那张表的
查询应该是在if...else里面吧,可是if...else不是循环执行的,在代码里只执行了一次。
你是不是在循环调用TForm9.tvlchange事件呀?
还有就是tvl和lvl是什么控件?请说明一下,再有就是代码里面一般不要写
if 布尔值 = true then 应该直接写
if 布尔值 then