procedure TDialogSendReportEmailAdd.ButtonAddIndexNOListClick( Sender: TObject); var i: integer; j: integer; item:TListItem; isAllowAdd:Boolean; begin try for i := 0 to MemoIndexNOList.Lines.Count-1 do begin isAllowAdd := True; //跳过空行 if MemoIndexNOList.Lines[i] = '' then Continue; //检查是否存在重复项目 dbopTemp.Open('SELECT cd.IndexNO,ca.CorpName,ca.EMailAddress,ca.NeedSendMail,cd.ClientAccountID,cd.ClientAccountIDCC' +' FROM xtkf.clientaccount ca JOIN xtjw.cyd cd ON cd.ClientAccountID = ca.ClientAccountAutoIndex' +' WHERE cd.IndexNO="'+MemoIndexNOList.Lines[i]+'"'); for j := 0 to ListViewDetails.Items.Count-1 do begin if ListViewDetails.Items[j].Caption = MemoIndexNOList.Lines[i] then begin isAllowAdd := False; Break; end; end; //跳过重复的 if not isAllowAdd then Continue; //跳过验证不通过的 if not CheckReportSend(MemoIndexNOList.Lines[i]) then Continue; item := ListViewDetails.Items.Add; item.Caption := MemoIndexNOList.Lines[i]; item.SubItems.Add(dbopTemp.AsString('EMailAddress')); end; except on e: Exception do ShowMessage('添加前预处理失败'+ e.Message); end; // if Assigned(item) then FreeAndNil(item); end;报错:operated aborted
时间: 2024-02-14 22:13:11 浏览: 112
根据你提供的代码,我看到有两个可能会导致程序异常终止的地方:
1. 没有检查数据库操作是否成功
在代码中,你没有检查数据库操作是否成功。如果打开数据库或查询失败,程序将继续运行并尝试使用无效的结果,这可能会导致程序异常终止。
你可以在打开数据库或查询后,使用 `dbopTemp.Eof` 属性来检查结果是否为空。如果结果为空,则说明查询失败,你可以通过抛出异常来中止程序运行。
2. ListViewDetails 可能为空
在代码中,你使用了 ListViewDetails 变量,但是你没有检查它是否为空。如果 ListViewDetails 为空,则 `ListViewDetails.Items` 的调用会导致程序崩溃。
你可以在使用 ListViewDetails 之前检查它是否为空,例如:
```delphi
if Assigned(ListViewDetails) then
begin
// 进行 ListViewDetails 的操作
end;
```
综上所述,你可以尝试在代码中添加这些检查,看看能否解决问题。
阅读全文