新建一个窗体程式
拖进三个控件
Timer1 //设定两秒执行一次
SqlQuery1->SqlConnection1
BUG 1......const sqlstr = 'select 商品代码 from 商品档案 where id=1';
事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
with ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add(sqlstr);
//Open; //这没问题
I:=ExecSql(); //问题来了,每次漏一点内存,
end;
end;
BUG 2......const sqlstr = 'select 商品代码 from 商品档案 where id=1';
事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
SqlConnection1.Open;
with ADOQuery1 do
begin
.......
end;
SqlConnection.Close; //这段代码会无法Free掉Open时创建的N个线程,程序的线程数会爆增一直不停
end;
BUG 3......const sqlstr = 'select 商品代码 from 商品档案 where id=1';
事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
aTran:TDBXTransaction;
begin
aTran:=SqlConnection1.BeginTransaction //这里有时会根本不起动事务,aTran极有可能=nil
with ADOQuery1 do
begin
.......
end;
SqlConnection1.CommitFreeAndNil(aTran); end;//////////////////////////////////////////////////////////////////////////////////
以上测试环境 D2007 D2009 Sybase Ase 12.5
拖进三个控件
Timer1 //设定两秒执行一次
SqlQuery1->SqlConnection1
BUG 1......const sqlstr = 'select 商品代码 from 商品档案 where id=1';
事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
with ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add(sqlstr);
//Open; //这没问题
I:=ExecSql(); //问题来了,每次漏一点内存,
end;
end;
BUG 2......const sqlstr = 'select 商品代码 from 商品档案 where id=1';
事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
SqlConnection1.Open;
with ADOQuery1 do
begin
.......
end;
SqlConnection.Close; //这段代码会无法Free掉Open时创建的N个线程,程序的线程数会爆增一直不停
end;
BUG 3......const sqlstr = 'select 商品代码 from 商品档案 where id=1';
事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
aTran:TDBXTransaction;
begin
aTran:=SqlConnection1.BeginTransaction //这里有时会根本不起动事务,aTran极有可能=nil
with ADOQuery1 do
begin
.......
end;
SqlConnection1.CommitFreeAndNil(aTran); end;//////////////////////////////////////////////////////////////////////////////////
以上测试环境 D2007 D2009 Sybase Ase 12.5
SqlConnection1.Open;及close放在过程外面,只要一次连接就行了。
过程里面只要关闭查询返回的数据结果集
ADO的我测试过不会这样
1、事務問題,上個事務還沒執行完
2、應該先把相關聯的其它控件關了如,SQLQUERY之類的,再關SQLCONNECTION
3、創建事務的方法不對,應先判斷一下事務的狀態後再創建。
不要怪DBEXPRESS!
只能打开获取,ExecSql是执行更新语句时用的。不一一点评了,楼主写程序,首先思路还没有弄清楚啊。