• ベストアンサー

VB.NETで、20バイト程度のデータを5000件ぐらい一時データとして・・

VB.NETで、10バイト程度のデータを5000件下手すればもっと?ぐらい一時データとして・・プログラムで使いたいんですが、今はファイルに保存して読み込みながらやってるんですが、処理速度が遅いので、配列にしようかなーと考えているのですが、データベースから読み込んでいるのでデータ数が不明なのです。 dim abc as(10000) as string とかやれば簡単なのですが、これだとメモリ使いすぎ?な気がして。 何かよい方法ないでしょうかー?

  • Haule
  • お礼率52% (125/240)

質問者が選んだベストアンサー

  • ベストアンサー
  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.1

動的配列を使用されてはいかがでしょうか? <定義> Dim abc() As String <使用例> ※100件ごとに配列を拡張しながらデータ取得する場合 'レコードセット取得 Set RS = DB.Execute("SELECT * FROM EMP") '行番号初期化 lngRow=0 'データを順次取得 Do Until RS.EOF = True '行番号が配列の添え字以上なら100行分拡張 If lngRow > Ubound(abc) Then Redim Preserve abc(Ubound(abc) + 100) End If 'データ取得 abc(lngRow) = RS.Fields(0).Value '行番号インクリメント lngRow=lngRow+1 '次のレコードへ移動 Call RS.MoveNext() Loop 'レコードセット開放 RS.Close Set RS = Nothing

Haule
質問者

お礼

なるほど!やってみますねー^^

関連するQ&A

  • VB5でCSVデータをAccess97のDBへセット

    普段はVB.NETの開発をすこししているのですが VB5のプログラムの修正の依頼が来て困っています。 CSVのデータをVB5でAccess97のDBへデータセットしたいのですが VB.Netでは同様のプログラムを作成した事があるのですが VB5は全然仕様が違うので困っています。 VB5でCSVを読み込んで配列にセットするにはどのように したらいいのでしょか?CSVを行で読み込むところは なんとか調べてわかりましたが、VB5ではSplitや配列が使えそうに ないのでどのようにしたらいいのかわかりません。 よろしくお願いします。 現在のソース Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "c:\infile.csv" For Input As #intFileNo Do While Not EOF(intFileNo) Line Input #intFileNo, strTextLine Loop Close #intFileNo

  • VB6.0からVB2008移植時のStringの使用方法

    初歩的な質問だと思うのですが色々調べてもわからなかったのでご教授願います。 VB6.0からVB2008にプログラムを移植しているのですが以下の部分の修正方法がわかりません。 元(VB6.0)のソース Dim strStart, strEnd As String strStart = Format( data.Start(0), "0.0" ) strEnd = Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'data.Start/data.EndはSingleの配列 VB2008のソース Dim strStart As String Dim strEnd As String strStart = VB6.Format( data.Start(0), "0.0" ) strEnd = VB6.Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'VB6.Format~はソースをUpGradeしたときに自動で変換されました VB2008のstrStartに設定する時点でエラー('System.NullReferenceException' の初回例外が DataRcvSample.exe で発生しました。)となりstrStartがNothingなのがいけないところまではわかったのですが、Newを使ってどのように設定すればいいのかがわかりません。 VB自体まだ2週間位しか触っていない初心者なのですが、急ぎの仕事で勉強する時間がなく、どうすればいいのか困っています。 修正方法をご教授願います。

  • VB.NETで、配列をテーブルに変換する。

    VB.NETで、一次元配列string()にあるデータを、DataTableに変換 したいのですが、「型'String'の値を'System,Data,DataTable'に変換できません。」 と、エラーが発生してしまいます。 s1に、配列データが入っています。 Dim dt As DataTable Dim cnt As Integer Dim i As Integer dt = New DataTable count = s1.Length For i = 0 To cnt - 1 dt = CType(s1(i), DataTable) Next 解決方法が見つからず、行き詰っております。 宜しくお願い致します。

  • VB.netでのMySQLの接続エラーについて

    VB.netでのMySQLの接続エラーについて 『行いたい事』 レンタルサーバー(ロリポップ)で管理しているサイトのデータベース(MySQL)にパソコンから接続したいと考えています。 パソコンからレンタルサーバーで管理しているデーターベースにアクセスするための言語はVB.netを使用しています。 パソコンからVB.netにてSQLを使用してサーバーにあるデータベースのデータの取得等を行いたいと考えています。 『問題』 下記プログラムにてstrPasswordに直接、レンタルサーバー(ロリポップ)より取得したパスワードを記載しているのですが、Open() 時にエラーとなってしまいます。 下記★の部分が、会社からインターネットに接続する為のプロバイダーから取得しているパスワードに自動的に変わってしまいます。 基本的な事で申し訳ありませんが、ご教授のほどよろしくお願いします。 ●環境 ・Windows XP ・Visual Studio 2008 ・.NET Framework3.0 sp2 端末からデータベースへアクセスするためにConnector/Netを入手しインストールも行っています。 ●-----エラー内容----- Access denied for user 'ユーザID'@'★ここが変わっています★' (using password: YES) ●-------------------- ●-----プログラム----- Dim strServerName As String = "●●.lolipop.jp" Dim strUserID As String = "ユーザID" Dim strPassword As String = "パスワード" Dim strDataBaseName As String = "データベース名" Dim sqlStr As String Dim dr As MySqlDataReader Dim cmd As MySqlCommand Dim MySql As New MySqlConnection '接続パラメータ定義. Dim strParam = String.Format("Server={0};User ID={1};Password={2};Initial Catalog={3};Convert Zero Datetime=true", _ strServerName, strUserID, strPassword, strDataBaseName) '接続準備 MySql = New MySqlConnection(strParam) '接続 MySql.Open() ★この行でエラーとなり書き換わっています。 'クローズ MySql.Close() ●------------------

  • vb.netでByte型の実配列サイズが大きい件

    vb.netでByte型の配列を100byteで宣言しましたが、実際の配列サイズは101byteになりました。 (例) Module Module1 Sub Main() Dim buffSize As Integer = 100 Dim inputBuff(buffSize) As Byte Dim ii As Integer = inputBuff.Length Console.WriteLine("バッファサイズ = {0}", ii) End Sub End Module ここで、iiは、101となります。 CとかC++では、有り得ない仕様ですが、どういう意味が有るのでしょうか? ご教示お願い致します。

  • VB6のTYPE文をVB.NETのStructureに変えるとき

    VB6のTYPE文をVB.NETのStructureに変えるとき 下記VB6のコードをVB.NETのStructureに変える場合 Type kouzou1 i As Integer j As Integer a As String * 20 b As String * 50 End Type を下記にしてみたのですが *20,*50のところは、どのように表現するのでしょうか。 Structure kouzou1 Dim i As Integer Dim j As Integer Dim a As String * 20 <- ステートメントの終わりを示してくださいのエラーになる。 Dim b As String * 50 <- ステートメントの終わりを示してくださいのエラーになる。 End Structure お教え下さい。

  • VB.NETのメモリ領域について

    VB.NETのメモリ領域について 以下の(1)~(12)の変数のために、 スタック領域、静的領域、ヒープ領域のどこのメモリが使われるか教えてください。 Class Sample   Dim a As Integer '(1)   Dim b As String = "BBB" '(2)   Shared c As Integer '(3)   Shared d As String = "DDD" '(4)   Sub X()     Dim f As Integer '(5)     Dim g As String = "GGG" '(6)     Static h As Integer '(7)     Static i As String = "III" '(8)   End Sub   Shared Sub Y()     Dim k As Integer '(9)     Dim l As String = "LLL" '(10)     Static m As Integer '(11)     Static n As String = "NNN" '(12)   End Sub End Class それぞれこんな認識で合ってますか? スタック領域 (1)(5)(9) スタック領域にポインタ+ヒープ領域に実体 (2)(6)(10) 静的領域 (3)(7)(11) 静的領域にポインタ+ヒープ領域に実体 (4)(8)(12)

  • accessのデータをVB.NETに

    accessファイルで、その中にテーブルが入っています。   ID、名前、住所 となっているとします。 都合によりデータを配列に入れたいのですが、可能なんでしょうか? id(100)as int16 name(100)as string add(100)as string このような感じです。

  • 教えてください。VBでのバイナリデータ。

    EUCコードで作成されたlndatファイルをオープンし、 コード変換するプログラムを作っています。 データの所得時にHexを使っているのですが、 所得データが 000000000000000000220801011200012000 となっています。 元データは 000000000000000000000000000000000000220080010001012000000120000000000000 なため、この様に所得したいのですが、上手く所得できません。 こういったデータの所得は可能なのでしょうか? また、自分の作成したソース自体にバグがあるのでしょうか? よろしかったら教えてください。 >>以下ソース Dim Data As Byte     '所得データ(1バイトごと) Dim Data_A As Variant 'ファイルから所得したデータ(ALL) Dim I As Long 'カウンター Dim File_Name As String 'ファイル名 Dim Filnm As Long 'ファイル番号 I = 1 Data_A = "" Filnm = FreeFile File_Name = "AA.lndat" Open App.Path & File_Name For Binary As #Filnm Do While EOF(Filnm) = False Get #Filnm, I, Data Data_A = Data_A & Hex(Data) I = I + 1 Loop Close #Filnm >>開発環境 VB5.0(SP3) Win2000 フリーのDLL等は使用不可能とお考え下さい。

  • VB.net教えてくださいm(__)m(初心者)

    VB.netで、ACCESSのデータベース(以下DB)に接続して、DBの内容を、ブラウザ上でVB.netのコントロール"DataGrid"(以下DG)に表示させるプログラムを作成しています。 Dim dc As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\練習フォルダ\練習データベース.mdb")  dc.Open()  Dim cmd As New OleDb.OleDbCommand _  ("SELECT mikan,ringo,nasi,budou from Q_フルー  ツ", dc)  dgITIRAN.DataSource = cmd.ExecuteReader()  dgITIRAN.DataBind()  dc.Close() 以上のソースで、画面に表示させるところまではできたのですが・・・。 1.コード上で、DBのレコード数が知りたいのですが(DB上にいくつデータがあるかを変数にいれたい)どのように記述すればよいでしょうか? 2.例えば、データが20件あって、ページングの設定で10件しか表示させない場合、コマンドボタン「前ページ」と「後ページ」を作った場合、どのようなコードを書けばよいでしょうか?

専門家に質問してみよう