奇怪的ZQuery行为

时间:2020-02-25 17:44:07

标签: sqlite delphi zeos

我在Delphi中使用Zeos和SQLite3 DB

ZQuery2.Close;
ZQuery2.SQL.Clear;
ZQuery2.SQL.Add('SELECT * FROM users WHERE un = ' + QuotedStr( UserName ) );

ZQuery2.Open;

OutputDebugString(PWideChar( ZQuery2.FieldDefList.CommaText )); // log : id,un,pw
OutputDebugString(PWideChar(ZQuery2.FieldByName('pw').AsString)); //causes error sometimes

代码正在运行,但有时会收到以下错误消息 带有消息“ ZQuery2:Field'pw”的异常类EDatabaseError”。

1 个答案:

答案 0 :(得分:1)

这很奇怪,因为在应用程序运行期间,数据集的字段不应只是消失,尤其是在其他字段仍在正常运行的情况下。因此,我怀疑是内存覆盖之类的原因。

通常是由于指针值不正确或所谓的“缓冲区溢出”,导致写操作在应停止的地方进行,这是因为将某些内容写入内存中的错误位置会覆盖内存中的内容。通常,指针值非常错误,以至于OS可以检测到它并引发AV,但是有时它不太明显。

Delphi的内存管理器具有“完全调试模式”,可以为这种情况添加特殊检查,请参见here

我建议您根据链接文档启用完全调试模式,并等待异常发生。

相关问题