- PR -

2つの条件をクリアする if 文を作成しています。

1
投稿者投稿内容
evian
会議室デビュー日: 2003/11/26
投稿数: 2
投稿日時: 2003-11-26 07:43
よろしくお願いします。
VB.NETで1つのテーブルから検索条件を満たしたレコードがある場合と条件を満たさない場合とで異なる処理をするWebアプリを作成中です。
フォームには、テキストボックスとドロップダウンリスト(DDL)とラベルがそれぞれあり、テキストボックスとDDLはそれぞれ別々のフィールドをDataViewを使い参照することになっています。

現在、以下のような状態です。
==================================================
' ユーザーが検索条件を入力したかどうかを確認します。
If TextBox1.Text = "" Then
Label1.Text = "ご希望のアカウント名を入力してください。"

ElseIf ddl.Items(0).Selected Then
Label1.Text = "ご希望のドメイン名を入力してください。"

Else
Dim i As Integer
Dim j As Integer
i = dv.Find(TextBox1.Text)
j = dv2.Find(ddl.SelectedIndex)
If i > dv.Table.Rows.Count Or i < 0 And
        j > dv2.Table.Rows.Count Or j < 0 Then
Label1.Text = "ご希望のアカウント名は取得可能です。"
Else
Label1.Text = "ご希望のアカウント名は取得できません。"
End If
End If
==================================================

実行してみるとなかなか意図する結果にならず知識を出し尽くしてしまったようです。
ご教授願います。
なな
ぬし
会議室デビュー日: 2003/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-11-26 08:17
> If i > dv.Table.Rows.Count Or i < 0 And
>         j > dv2.Table.Rows.Count Or j < 0 Then

優先順位を明確にするために、括弧をつけてみてください。

例:
If (i <= 0 And i < dv.Table.Rows.Count) Or
(j <= 0 And j < dv2.Table.Rows.Count) Then


[ メッセージ編集済み 編集者: なな 編集日時 2003-11-26 08:17 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-26 08:43
引用:

evianさんの書き込み (2003-11-26 07:43) より:

実行してみるとなかなか意図する結果にならず知識を出し尽くしてしまったようです。
ご教授願います。


 「意図する結果」とは、どのようなものですか?

 メールアドレスが取得できるかどうかのチェックのようですが、ドメイン名は選択式なんですよね?「メールアドレス」がどのような形式でビューに格納されているのか、不明ですが、「"入力した文字列"@"選択したドメイン"」が、登録されているメールアドレス内にあるかどうか、という1つを検索するだけで良くないですか?つまり、入力が「watashi」で、ドメインが「my.domain.com」とすると、「watashi@my.domain.com」が登録されているかどうかを調べるだけでいいですよね?「watashi@your.domain.com」があっても、別のアドレスになるので、かまわないですよね。

 それから、dvとdv2ですが、おそらくDataViewクラスのインスタンスだと思いますが、DataView.Findメソッドの戻り値は「検索対象のインデックス」なので、この戻り値であるiとjが、全ての行の数であるDataTable.Rows.Countよりも大きくなることはありません。また、見つからなかった場合の戻り値はnull(Nothing)なので、単純な数値比較はできません。

 また、DataView.Findメソッドの説明を読むと、どうも並べ替えに使用したキー列からしか探さないように思います。つまり、ビューはすでに並べ替えられているものとして、前方からの線形検索のように思います。
1

スキルアップ/キャリアアップ(JOB@IT)