配列の長さが変わる場合の長さの指定の仕方は?

解決


トト  2008-04-03 17:27:46  No: 144577  IP: 192.*.*.*

配列の使い方がよく分かっていませんので教えてください。

テーブルの内容を変更するプログラムをVB.NETで作っています。
下記のようなテーブルがあったとき、

  ・テーブル
  No      営業所    品物
  -------------------------
  1       AAAAA     aiu
  2       AAAAA     eo
  3       BBBBB     kaki
  4       AAAAA     kuke
  5       CCCCC     kosa
  6       AAAAA     sisu

営業所=AAAA を選択したときは下記が選択されますが

  ・表示
  No      営業所    品物
  -------------------------
  1       AAAAA     aiu
  2       AAAAA     eo
  4       AAAAA     kuke
  6       AAAAA     sisu

この時表示だけ、Noを1から順に割り振ります。
(下記のようにしたい)

No      営業所    品物
-------------------------
1       AAAAA     aiu
2       AAAAA     eo
3       AAAAA     kuke
4       AAAAA     sisu

ここで、表示上の3番目を修正したい時に、
「No.3  営業所:AAAA⇒BBBB、品物:kuke⇒mume」と表示させ、
実際には、テーブルの4番を修正したいと考えています。
(表示にはFlexGridを使用します。)

        Dim cn As New OleDb.OleDbConnection
        Dim cmd As New OleDb.OleDbCommand
        Dim rs As OleDb.OleDbDataReader
        Dim strSQL As String = ""
        Dim k As Integer = 0
        Dim intNo() as Integer
        cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDBPath
        cn.Open()
        cmd = cn.CreateCommand()
        cmd.CommandText = "SELECT [No],営業所,品物 FROM テーブル WHERE 営業所=AAAA"
        rs = cmd.ExecuteReader()

        If rs.HasRows = True Then
            Do While (rs.Read())
                intNo(k) = rs.GetValue(0)
                Dim strBuf As String = ""
                For i As Integer = 1 To rs.FieldCount - 1
                    strBuf = k + 1 & vbTab & rs.GetValue(i)
                Next
                FGrid1.AddItem(strBuf)
                k += 1
            Loop
            rs.Close()
        End If

配列に取得したテーブルのNoを代入して、
テーブルの修正を行う時、メッセージには表示上のNoを、
実際には、テーブルのNoを指定して修正を行いたいのです。

上記ですと、「オブジェクト参照がオブジェクトインスタンスに設定されていません」
とエラーになります。

        Dim intNo() as Integer

上記で配列の長さを「100」とすると表示ができるのですが、
検索するたびに配列の長さが変わる場合は、どうすればよいでしょうか。

編集 削除
やじゅ  2008-04-03 19:44:32  No: 144578  IP: 192.*.*.*

ループ中に↓を入れる
Redim Preserve intNo(k)

それか、配列より、ArrayListを使った方がいいかな。
Dim aryNo as New ArrayList
aryNo.Add(rs.GetValue(0))

編集 削除
トト  2008-04-03 20:08:50  No: 144579  IP: 192.*.*.*

ArrayListというのを知りませんでした。
よく調べときます!

これを修正したら、その他の問題がボロボロと出てきましたが、
やりたいことが出来るようになりました。

ありがとうございました。

編集 削除