| ■77751 / ) |
Re[9]: ADOのコンパイルおよび組み込み |
□投稿者/ tarou (7回)-(2015/11/20(Fri) 13:43:25)
|
魔界の仮面弁士 ご指摘ありがとうございました。
>> "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & m_sMdbPath & ";" >> "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" & m_sMdbPath & ";" + "Jet OLEDB:Engine Type=5;" > 何故、最後の一つだけ、文字列連結に「&」ではなく「+」を使っているのでしょうか? > VB では + で繋ぐことにメリットが無いので、& に変更されることをお奨めします。
&に変更させて頂きました。
> ついでに言えば、連結処理がそもそも冗長で、 > "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sMdbPath & ";Jet OLEDB:Engine Type=5;" > あるいは > "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=" & m_sMdbPath > で十分でしょう。
こちらも変更させて頂きました。
> なお、"Jet OLEDB:Engine Type" は、JRO.JetEngine.CompactDatabase メソッドでは意味を持ちますが、 > ADODB.Connection.Open や System.Data.OleDb.OleDbConnection.Open メソッドでは無視されるようなので、 > 接続文字列として指定しても、あまり意味は無いかもしれません。 > (開いた後で動的プロパティを見ると、データソースに応じたバージョン値が設定されます) "Jet OLEDB:Engine Type"の接続文字列は、消去させていただきました。 接続文字列について意味がよくわかっていませんでした。ご説明有難うございます。
>> MRComObject(m_objTbls) > System.Runtime.InteropServices.Marshal.ReleaseComObject を呼ぶためのメソッドですかね ご指摘の通りです。説明不足でした。申し訳ございません。 以下がその関数ですが、見ようみまねで、作成したものです。 引数がByref、Byval どちらが妥当なのか等、まだまだ、私の中ではすっきりと、 解決できていません。そもそも関数にしてよいのかも、正直迷っています。
Public Shared Sub MRComObject(ByRef objCom As Object) 'COM オブジェクトの使用後、明示的に COM オブジェクトへの参照を解放する Try '提供されたランタイム呼び出し可能ラッパーの参照カウントをデクリメントします If Not objCom Is Nothing AndAlso System.Runtime.InteropServices. _ Marshal.IsComObject(objCom) Then Dim I As Integer Do I = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) objCom = Nothing Loop Until I <= 0 End If Catch Finally '参照を解除する objCom = Nothing End Try End Sub
もし、宜しければご教授頂けないでしょうか。
|
|