配列の内容にまとめてチェックをかけるには?

解決


ちる  2005-09-16 03:31:26  No: 125384

皆様はじめまして。ちると申します。
VB暦2週間ほど、環境はVB.Net2003です。
以後、お見知りおきをお願いいたします。

現在Access2000に対しての問い合わせをしています。

DBの各カラムの値を配列に代入して、各カラム内容を加工しその後
アップデートするといった場合にカラムの数だけ要素がある配列を
作り、一つずつ代入しています。
このときカラムの中身がNullの場合エラーが出ますので

If IsDBNull(DsTEST1.TEST.Rows(0)("CLM01")) Then
    arrA(0) = ""
Else
    arrA(0) = DsTEST1.TEST.Rows(0)("CLM01")
End If

といったようにしてエラーを回避しています。

そうすると、カラムの数だけIF文が繰り返されるので、多ければ非
常に見難くなります。配列の要素の内容すべてを一度にチェックで
きるような方法は無いでしょうか。

宜しくお願いします。


我龍院忠太  2005-09-16 07:07:57  No: 125385

"CLM01"が連続していればもっと簡単になると思われるが、それは置いておいて。

Private Function ConvertToText(ByVal obj As Object) As String
    If TypeOf (obj) Is String Or IsNumeric(obj) = True Then
          Return CType(obj, String)
    Else
          Return String.Empty
    End If
End Function

arrA(0) = ConvertToText(DsTEST1.TEST.Rows(0)("CLM01"))
こんなかな、あまり自信なし。


我龍院忠太  2005-09-16 18:37:20  No: 125386

追伸
自信が無いといったのは、ちょっと説明が面倒なのですが私ならこんなことをします。
配列のクラスを宣言して、プロパティに値を入れる時に適正をチェックします。
更にプロパティのvalueにインデクサを設定して、クラス自信が配列の様に見せてます。
クラスを実装してしまえば後の構文は極めて簡単になります。
プロパティの値のチェックはあくまでも例で、データーベースの仕様により異なります。
    Public Class MyArry
        Private m_value(100) As String
        Default Public Property value(ByVal no As Integer) As Object
            Get
                Return m_value(no)
            End Get
            Set(ByVal Value As Object)
                If TypeOf (Value) Is String Or IsNumeric(Value) = True Then
                    m_value(no) = CType(Value, String)
                Else
                    m_value(no) = String.Empty
                End If
            End Set
        End Property
    End Class
    
    Private ArryA As New MyArr
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim MyVar As Object = System.DBNull.Value
        ArryA(0) = "2"
        ArryA(1) = 3
        ArryA(2) = MyVar
        For i As Integer = 0 To 2
            Debug.WriteLine("配列の内容=" + CType(ArryA(i), String))
        Next
    End Sub


我龍院忠太  2005-09-16 18:41:40  No: 125387

ああしまった!  コピペが切れてしまった。(^^;
Private ArryA As New MyArr -> Private ArryA As New MyArry


medaka  2005-09-16 19:22:58  No: 125388

Convert.ToString(DsTEST1.TEST.Rows(0)("CLM01")) 
でdbnull.valueの場合も””で取得できると思いますが


ちる  2005-09-17 22:31:25  No: 125389

我龍院忠太さん、medakaさん、ご回答有難うございます。

つまり単純に、StringにDBNullを入れようとするとエラーが出るのですね。
で、こんなことをしてみました。

Dim arrA(2) As Object
Dim MyVar As Object = System.DBNull.Value

arrA(0) = "2"
arrA(1) = 3
arrA(2) = Convert.ToString(MyVar)

Convert.ToString(arrA)

TextBox1.Text = arrA(0) & vbCrLf & _
                arrA(1) & vbCrLf & _
                arrA(2) & vbCrLf

結果は思い通り。

Dim arrA(2) As String

だとやはりエラーが出ました。

インデクサというのは、実は初耳でした。
(持っている本には載ってなかったりする(^^;)
どちらの方法もがんばって身につけようと思います。
有難うございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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