如何传递tstrings类型的数据?(50分)

M

Minor

Unregistered / Unconfirmed
GUEST, unregistred user!
我在datamodule写了个funciton

function TDM.Getuserlist: Tstrings;
var tmp:Tstrings;
begin
tmp:=Tstringlist.Create;
try
with Query do
begin
close;
sql.Clear;
sql.Add('select * from user');
open;
first;
while not eof do
begin
tmp.Add(fieldbyname('UserName').AsString);
next;
end;
end;
result:=tmp;
finally
tmp.Free;
end;
end;


然后在loginform上有个combobox,要把tstings内容赋给它

procedure TFrm_login.FormShow(Sender: TObject);
begin
combobox1.Items:=Dm.Getuserlist;
end;


我尝试过会发生严重错误。请教应该如何写代码。

 
试试:
ComboBox1.Items := TStrings(Dm.Getuserlist);
 
对象都释放了,你返回的指针已经没有意义,
可以定义一个成员变量,使其一直存在,就没有问题了
也可以这样
procedure GetUserList(const UsrLst: TStrings);
begin
{ fill the list }
end;
 
靠,问题简单。
function TDM.Getuserlist: string;
var tmp:Tstrings;
begin
tmp:=Tstringlist.Create;
try
with Query do
begin
close;
sql.Clear;
sql.Add('select * from user');
open;
first;
while not eof do
begin
tmp.Add(fieldbyname('UserName').AsString);
next;
end;
end;
result:=tmp.text;
finally
tmp.Free;
end;
end;


然后在loginform上有个combobox,要把tstings内容赋给它

procedure TFrm_login.FormShow(Sender: TObject);
begin
combobox1.Items.text:=Dm.Getuserlist;
end;


 
把tstringlist 的 create 与 free
拿出来不要放在函数里面.
或者不要free
 
Result所指向的对象返回前不要 Free,而在调用所在的方法
中用完了再Free.
 
to Minor:
你这不是传递错误 ,而是函数错误,你要返回一个地址怎么能释放掉呢。
不须要申请一个临时变量直接用Result就可以了。
Result:=TStringList.Create;
.... 赋值动作。
Result.Free; //你想想这里能用吗?你的方法是不是等价于用了。
 
应该用
assign()函数吧?
 

assign()函数
 
下面的代码不要,不能 free.

finally
tmp.Free;/////////
end;
 
try
{...}
finally
{...}//不管TRY块是否出错,finally块都会执行.
end
 
接受答案了.
 
顶部