皆様はじめまして。ちると申します。
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文が繰り返されるので、多ければ非
常に見難くなります。配列の要素の内容すべてを一度にチェックで
きるような方法は無いでしょうか。
宜しくお願いします。
"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"))
こんなかな、あまり自信なし。
追伸
自信が無いといったのは、ちょっと説明が面倒なのですが私ならこんなことをします。
配列のクラスを宣言して、プロパティに値を入れる時に適正をチェックします。
更にプロパティの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
ああしまった! コピペが切れてしまった。(^^;
Private ArryA As New MyArr -> Private ArryA As New MyArry
Convert.ToString(DsTEST1.TEST.Rows(0)("CLM01"))
でdbnull.valueの場合も””で取得できると思いますが
我龍院忠太さん、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
だとやはりエラーが出ました。
インデクサというのは、実は初耳でした。
(持っている本には載ってなかったりする(^^;)
どちらの方法もがんばって身につけようと思います。
有難うございました。
ツイート | ![]() |