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

解決


はっちゃん  2020-08-10 15:46:05  No: 148980

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

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

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


igy  2020-08-10 17:01:29  No: 148981

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

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

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


はっちゃん  2020-08-10 17:26:53  No: 148983

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 17:36:27  No: 148984

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


AAA  2020-08-10 18:00:27  No: 148985

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


はっちゃん  2020-08-10 18:09:10  No: 148986

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


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加