我定义了一个动态数据,然后往数组里面填东西,填完后马上访问数组有数据(填数据与访问数据在同一个方法内),但如果在另一个方法内访问数组却出错,经测试数组的长度变为0,我改用静态数组,没有上述问题,调试了很久,不得其解,实在郁闷,不知哪位高手能赐教!
解决方案 »
- 求教,buttonclick事件中的赋值语句什么时候执行
- adoquery 中的sql.clear 和 close分别有什么作用呀?
- 如何做到在一个按钮上点击左键时在点击位置弹出弹出菜单?
- 快捷键的问题,只按下“S”,而不需要按下“ctrl+s”
- 关于 COALESCE 函数的使用问题...谢谢
- 谁能贴一个关于TQUERY,TTABLE等控件的数据库应用的详细使用
- 关于流的读写
- 求求各位了!来看看这个简单的问题吧!
- 谁帮我解释一个消息和事件到底有什么不同。分全部送上。我是菜鸟。
- 在Delphi中如何实现类似VB中Do Events的功能?
- 打印时如何判断系统已经与网络打印机连接
- 问:这段sql应该如何写?
var
Array1: array of Integer;
begin
SetLength (Array1, 100);
for I := Low (Array1) to High (Array1) do
Array1 [I] := I;
end;
另外,是单线程的程序吧?
unit Unit2;interface
uses
Classes, SOAPHTTPClient, StrUtils, DBClient, XMLDoc, XMLIntf, DB, SysUtils,
Variants, Dialogs;type
TMyHTTPRIO = class(THTTPRIO)
public
fArray: array of string;
procedure setArray;
protected
procedure DoAfterExecute(const MethodName: string; Response: TStream); override;
end;implementationprocedure TMyHTTPRIO.setArray;
var
i: integer;
begin
for i:=0 to 2 do
begin
setLength(fArray, length(fArray)+1);
fArray[length(fArray)-1] := 'test';
end;
end;procedure TMyHTTPRIO.DoAfterExecute(const MethodName: string; Response: TStream);
begin
setArray;
inherited DoAfterExecute(MethodName, Response);
end;end.
这是一个关于WebService的程序,在接受到Service返回的数据后初始化数组,DoAfterExecute执行完后通过调试就会发现数据的长度变成无限大(反正很大,不正常),且数据都为空(‘’)
fArray: array of string;一个类中的公开变量
总觉得有问题,length(fArray)+1可以确定多少吗。
myhttprio := TMyHTTPRIO.Create(self);时一定要在Create中写self,我之前写的nil,所以产生了上面的错误,我是无意中发现的!然后用myhttprio.fArray去访问就没有错误了。
我只是还是弄不明白为什么一定要指定为self,我以前习惯用nil,看来一个小的疏忽换来大麻烦,以后决定改变习惯写self。
不过还请高手帮忙指点一下,为什么会有这种现象?