掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
MySQLにODBC接続でリストボックスに表示するには? (ID:120426)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
表示桁数の問題は、他の人に任せるとして……別の部分に関して。 > Do While (Not rs.EOF) While Not にするよりも、Until を使った方がスマートな気がします。 ADOを使うのであれば、 > Me.ListBox1.Items.Add(rs.Fields(0).Value & " " & rs.Fields(2).Value) これはまずいと思いますよ。ReleaseComObjectされていませんから。 先に紹介した記事に、もう一度目を通しておいてください。 http://support.microsoft.com/kb/321415/ja ここには、 ADO を .NET COM interop で使用すると、高負荷下でアクセス違反が 発生する可能性があるが、以下のコーディングにて、この問題が 発生する可能性を抑えられる。 といった内容が書かれており、そのコーディングとして ・ReleaseComObject メソッドを使用する。 ・ADODB の PIA(プライマリ相互運用アセンブリ)を利用する。 などの手法が書かれています。 ADODB は ActiveXコンポーネントであるため、ReleaseComObject で 明示的に解放処理を行わないと、オブジェクトがメモリ上に 残ってしまい、幾つかの問題を引き起こす可能性があります。 # Excelの場合などが有名ですね。( http://support.microsoft.com/kb/317109/ja ) (「ADO.NET」の場合は ActiveX ではないため、ReleaseComObject は不要です) で。もしもどうしても (ADO.NET ではなく) ADO を使う必要があるならば、 先に紹介した記事の内容にしたがって、 Dim I As Integer Dim Cn As New ADODB.ConnectionClass() Cn.Provider = "Microsoft.Jet.OLEDB.4.0" Cn.Open("C:\db1.mdb") Dim Rs As New ADODB.RecordsetClass() Rs.Open("SELECT * FROM TestTable", Cn) Dim Fs As ADODB.Fields = Rs.Fields 'Fieldsオブジェクトを取得 Dim F0 As ADODB.Field = Fs(0) 'Fieldオブジェクトを取得 Dim F2 As ADODB.Field = Fs(2) 'Fieldオブジェクトを取得 Do Until Rs.EOF I += 1 Me.ListBox1.Items.Add(F0.Value.ToString() & vbTab & F2.Value.ToString()) Rs.MoveNext() Loop System.Runtime.InteropServices.Marshal.ReleaseComObject(F2) System.Runtime.InteropServices.Marshal.ReleaseComObject(F0) System.Runtime.InteropServices.Marshal.ReleaseComObject(Fs) Rs.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(Rs) Cn.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(Cn) のようなコードを書く必要があるかと思います。 (最後に、個々のオブジェクトを ReleaseComObjectで解放しています) もしくは、(Filedオブジェクトの)Valueプロパティを使う代わりに、 (Recordsetオブジェクトの)Collectプロパティを利用すると良いでしょう。 この場合、Fileds/Fieldオブジェクトを取得せずに値を取れますので、 ReleaseComObjectさせる手間を軽減させる事ができます。 Do Until Rs.EOF I += 1 Me.ListBox1.Items.Add(Rs.Collect(0).ToString() & vbTab & Rs.Collect(2).ToString().ToString()) Rs.MoveNext() Loop Rs.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(Rs) Cn.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(Cn)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.