エラー処理について(Selected.SubItems)

解決


はっちゃん  2020-08-10 06:46:05  No: 148980  IP: [192.*.*.*]

ListViewのセルを読み取りそのデータをデータベースに保存するプログラムを作っています。
そこでご質問ですが
以下の条件式で
該当セルにデータがなかった場合
エラーが発生して止まってしまいます。
エラーが発生したら処理をせずにスキップするようにしたいのですが
どのようにすればいいのでしょうか。
if ListView1.Selected.SubItems[120] <> '' then
 処理文
 ・
 ・
end;

初歩的なご質問で恐縮ですが教えいただけませんでしょうか。
よろしくお願いいたします。

~環境~
Windows 10 Pro 64bit
Delphi 10.2 Tokyo

編集 削除
igy  2020-08-10 08:01:29  No: 148981  IP: [192.*.*.*]

> エラーが発生したら処理をせずにスキップするようにしたいのですが 

エラーが発生したら・・・というのが条件なら、例外処理とかになるかと・・

# 実際のコードやエラーメッセージ、そしてエラーになる箇所
# を挙げられたら、より具体的な回答が得られるかもしれません。

編集 削除
はっちゃん  2020-08-10 08:26:53  No: 148983  IP: [192.*.*.*]

igyさんお返事ありがとうございます。

エラー内容は
「プロジェクト〇〇.exeは例外クラスEStringListError(メッセージリストのインデックスが範囲を超えています(120)を送出しました。」
となっています。

現在のコードは以下の通りとなっています。

      if ListView2.Selected.SubItems[120] <> '' then  ←エラー箇所です。
      begin
        item := ListView1.Items.Add;
        item.Caption := Copy(ListView2.Selected.SubItems[120], 0, 10);     //日付(28日)
      end;


ListView2.の120列目にデータが入っていない時にエラーが発生してしまい
プログラムが途中でとまってしまいます。
ListView2.の120列目にデータが入っていない時は処理をせずに次のコードに進んでほしいいんですけど・・・

編集 削除
igy  2020-08-10 08:36:27  No: 148984  IP: [192.*.*.*]

>if ListView2.Selected.SubItems[120] <> '' then
の箇所を
if (ListView2.Selected.SubItems.Count > 120) and (ListView2.Selected.SubItems[120] <> '') then
にしてみた場合、エラーは出なくなりますか?

編集 削除
AAA  2020-08-10 09:00:27  No: 148985  IP: [192.*.*.*]

>該当セルにデータがなかった場合 
全レコード同一データ数にすべきでは?

編集 削除
はっちゃん  2020-08-10 09:09:10  No: 148986  IP: [192.*.*.*]

igyさんご回答ありがとうございます。
おっしゃる通りにコーディングしたところ
無事にエラー回避でいました。
ListView2.Selected.SubItems.Count は気が付きませんでした。
ありがとうございます。

編集 削除