お世話になっております。
ArrayListを2つ使用して2次元配列のような事をしようとしております。
データベースから取得したデータの1行をArrayListItemへ格納してそのArrayListItemをArrayListRecordへ格納しようとしております。
追加し終わり最後にArrayListRecordの中身を見ると全て一番最後のデータで置き換わっています。
どなたかご存知でしたらお教え願います。
' 変数宣言
Dim objSqlDR As SqlDataReader
Dim alSetItem As ArrayList
Dim alSetRecord As ArrayList
alSetItem = New ArrayList
alSetRecord = New ArrayList
' データ取得分ループ
While objSqlDR.Read()
alSetItem.Clear()
For intSetIndex = 0 To (objSqlDR.FieldCount - 1)
alSetItem.Add(objSqlDR(intSetIndex))
Next intSetIndex
alSetRecord.Add(alSetItem)
End While
No.2ベストアンサー
- 回答日時:
alSetRecord.Add(alSetItem)
これは alSetItem の現在の値を alSetRecord に追加しているのではなく、alSetItem へのポインタを alSetRecord に追加しています。
よって alSetRecord に alSetItem のポインタがいくつ追加されようとも、全ては「ただ 1つの」alSetItem オブジェクトを指してしまうわけです。
そして alSetItem の中身はというと、最後のループで登録された中身なわけです。
alSetRecord.Add(alSetItem)
これを
alSetRecord.Add(alSetItem.Clone())
とするとか。
No.1
- 回答日時:
全てのレコードを個別に保持したいならば、ArrayList は1レコードずつ new しなければいけません。
この例では、while 直後の clear() によって、データが全て消えてしまっています。
end while 直前の .add() によって行われているのは、「クラス alSetItem をレコードとして登録する」という動作であり、値そのものをポイッと放り込んでいるわけではありません。
よって、この例を正しく修正するには、"alSetItem = New ArrayList" の行を、while の直後に移動します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
【C#】DataGridViewの最大列数...
-
excel access連携 このテーブル...
-
VB6でDBからクリップボード経由...
-
C#でのForm間のデータ受け渡し...
-
MSFlexGridのデータを初期化し...
-
エクセル オートフィルタ プ...
-
GridViewからチェックボックス...
-
WordでExcelデータを差込...
-
複数あるACCESSからのデータ取...
-
VisualBasic2010のPictureBoxに...
-
URLエンコードされなかったパラ...
-
パワークエリ
-
データを拾うときに文字化け?
-
VBA内でのGetPixelを使用した時...
-
「取得先」という表現について
-
Dosブロンプトでtabを出力したい
-
ファイル名に日付の挿入
-
バッチファイルでpingの結果を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DTOとEntityの差は何ですか。
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
WordでExcelデータを差込...
-
excel access連携 このテーブル...
-
ActiveReportのサブレポート機...
-
「外部データの取り込み」とい...
-
GridViewからチェックボックス...
-
★お手上げ状態です。助けてくだ...
-
INIファイルに一括書き込みを行...
-
VBA内でのGetPixelを使用した時...
-
VB.NET 2017の勉強中です。 今...
-
表を表示するコントロールについて
-
C#でのForm間のデータ受け渡し...
-
ASP.NET GridView の検索画面で...
-
C言語で地図を描きたい
-
回線速度が64kbpsだったら、64k...
-
ADOを使用してExcelファイルを...
-
MSFlexGridのデータを初期化し...
-
画像の読み込み&白黒判別プロ...
おすすめ情報