Y
yeskert1
Unregistered / Unconfirmed
GUEST, unregistred user!
太惊人了!
下面这些(棕色的)别看了,直接看讨论吧,在那里我修改了问题。
这里我给注释掉:
[brown]{我构造一个简单的例子说明我的问题。
下面代码完成的功能一样,即将表中所有字段(5个字段)的内容添加到memo1中。
代码1:
procedure TForm1.Button1Click(Sender: TObject);
var v:array of variant;
i:integer;
begin
adotable1.tablename:=tbl1;
provider1.dataset:=adotable1;
clientdataset1.provider:=provider1;
//
with clientdataset1 do begin
open;
setlength(v,clientdataset1.FieldCount);
first;
repeat
for i:=0 to 4 do begin
v:=fields.Value;
memo1.Lines.Add(v);
end;
next;
until eof;
close;
end;
end;
代码2:
procedure TForm1.Button1Click(Sender: TObject);
var v:array of variant;
i:integer;
begin
adoquery1.sql.text:='select * from tbl1';
provider1.dataset:=adoquery1;;
clientdataset1.provider:=provider1;
//
with clientdataset1 do begin
open;
setlength(v,clientdataset1.FieldCount);
first;
repeat
for i:=0 to 4 do begin
v:=fields.Value;
memo1.Lines.Add(v);
end;
next;
until eof;
close;
end;
end;
代码3:
procedure TForm1.Button1Click(Sender: TObject);
var v:array of variant;
i:integer;
begin
adoquery1.sql.text:='select * from tbl1';
provider1.dataset:=adoquery1;;
clientdataset1.provider:=provider1;
//
with clientdataset1 do begin
open;
setlength(v,clientdataset1.FieldCount);
first;
repeat
memo1.Lines.Add(fields[0].Value) ;
memo1.Lines.Add(fields[1].Value) ;
memo1.Lines.Add(fields[2].Value) ;
memo1.Lines.Add(fields[3].Value) ;
memo1.Lines.Add(fields[4].Value) ;
next;
until eof;
close;
end;
end;
说明:字段中有一个是memo类型的字段,问题跟它有关。如果不设计这个字段则一切正常,如果涉及这个字段,则“代码2”有内存泄漏,而“代码1”和“代码3”正常。
理解不了!
不知道是动态数组出问题了,还是adoquery?还是clientdataset?
?????????????????}[/brown]
下面这些(棕色的)别看了,直接看讨论吧,在那里我修改了问题。
这里我给注释掉:
[brown]{我构造一个简单的例子说明我的问题。
下面代码完成的功能一样,即将表中所有字段(5个字段)的内容添加到memo1中。
代码1:
procedure TForm1.Button1Click(Sender: TObject);
var v:array of variant;
i:integer;
begin
adotable1.tablename:=tbl1;
provider1.dataset:=adotable1;
clientdataset1.provider:=provider1;
//
with clientdataset1 do begin
open;
setlength(v,clientdataset1.FieldCount);
first;
repeat
for i:=0 to 4 do begin
v:=fields.Value;
memo1.Lines.Add(v);
end;
next;
until eof;
close;
end;
end;
代码2:
procedure TForm1.Button1Click(Sender: TObject);
var v:array of variant;
i:integer;
begin
adoquery1.sql.text:='select * from tbl1';
provider1.dataset:=adoquery1;;
clientdataset1.provider:=provider1;
//
with clientdataset1 do begin
open;
setlength(v,clientdataset1.FieldCount);
first;
repeat
for i:=0 to 4 do begin
v:=fields.Value;
memo1.Lines.Add(v);
end;
next;
until eof;
close;
end;
end;
代码3:
procedure TForm1.Button1Click(Sender: TObject);
var v:array of variant;
i:integer;
begin
adoquery1.sql.text:='select * from tbl1';
provider1.dataset:=adoquery1;;
clientdataset1.provider:=provider1;
//
with clientdataset1 do begin
open;
setlength(v,clientdataset1.FieldCount);
first;
repeat
memo1.Lines.Add(fields[0].Value) ;
memo1.Lines.Add(fields[1].Value) ;
memo1.Lines.Add(fields[2].Value) ;
memo1.Lines.Add(fields[3].Value) ;
memo1.Lines.Add(fields[4].Value) ;
next;
until eof;
close;
end;
end;
说明:字段中有一个是memo类型的字段,问题跟它有关。如果不设计这个字段则一切正常,如果涉及这个字段,则“代码2”有内存泄漏,而“代码1”和“代码3”正常。
理解不了!
不知道是动态数组出问题了,还是adoquery?还是clientdataset?
?????????????????}[/brown]