Microsoft Visual Basic 2010 Express の質問です。
ExcelVBAや、AccessVBAで作成したプログラムを、VBに移そうと思っています。
ネットや本のサンプルを、自分のやりたいことに修正しつつ、一応、動作としては希望通りなのですが、元々VBAで簡易に作ったものだけに、本来なら注意すべきインスタンスの管理などがおざなりになっています。
動作は一応正常ですが、果たしてこれで良いのか不安でもありますので質問させていただきます。
大抵の本やサンプルには、複数のSQLを連続で発行するようなものは載っていませんが、いくつものSQLを順次発行していく処理をする時は、どのように記述するのが正しいでしょうか?
例えば、Access2010データベース、C:\test.accdb には、別のテーブルからリンクしたテーブル genpon があるとします。これをコピーしたテーブル、tb01を作る場合、
------------------------------------
Dim com As OleDb.OleDbCommand
Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\test.accdb;")
cn.Open()
''現在のデータを削除
com = New OleDb.OleDbCommand("DROP TABLE [tb01];", cn)
com.ExecuteNonQuery()
''現在のデータを削除
com = New OleDb.OleDbCommand("SELECT * INTO [tb01] FROM [genpon];", cn)
com.ExecuteNonQuery()
------------------------------------
SQLとしては、現テーブルをDROPして、SELECT * INTO を発行すれば希望通りで、上記もその通り動きますが、NEWでインスタンス作成を繰り返しているのは、やってはいけない事ではないでしょうか?
さらに、例えばこのコードの続きとして、FOR~NEXTや、DO~LOOPで繰り返しを設け、その中でINSERT INTO を発行しながら、データを登録するような処理を加える場合、このままでは NEWをループの回数分、繰り返す事になります。
プロシージャの中で、ループなどで複数のSQLを発行する場合、記述として正しい作法がありましたら、教えてください。
No.1ベストアンサー
- 回答日時:
それぞれの最後、つまりExecuteNonQuery()の発行後、Dispose()すれば問題ありません。
が、どうせ同じインスタンスを利用するならば、2回目以降はCommandTextプロパティに設定されている
クエリを変更して発行、その後Dispose()でも良いでしょう。
また、移行ということで、元々問題ないのでしょうが、問題があるようならば
プリペアドステートメントによる発行を推奨します。(SQLインジェクション対策)
Accessはクエリキャッシュ機構はないでしょうから、パフォーマンスは変わらないでしょうけど。
http://msdn.microsoft.com/ja-jp/library/vstudio/ …
ありがとうございます。
Dispose() を発行後にセットする事にしました。
大きなやり方の間違いでなくて、ホッとしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
複数SQL発行について
Visual Basic(VBA)
-
SQL文 複数実行
SQL Server
-
VBA内でSQL(UPDATEをループ処理)したいのですが
Access(アクセス)
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
セルの値を取得してSQL文に組み込みたい
SQL Server
-
7
EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なる
Visual Basic(VBA)
-
8
レコードが存在しなかった場合
Microsoft ASP
-
9
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
10
アクセスで複数のSQL文をワンクリックで流したい
Access(アクセス)
-
11
like演算子内に変数って使えないんですか?
その他(プログラミング・Web制作)
-
12
ADO VBA 実行時エラー3021
Visual Basic(VBA)
-
13
複数のクエリーをVBで書く方法を教えてください。
その他(データベース)
-
14
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
15
SQLでエラーです。
Visual Basic(VBA)
-
16
ExecuteNonQueryメソッドの戻り値
その他(プログラミング・Web制作)
-
17
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
18
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
19
どこにもフォーカスを当てたくない
Access(アクセス)
-
20
MS SQLServer のSQLで文字列の前にN:
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
インスタンス参照でアクセスで...
-
javaのクラスの作り方、エラー...
-
変数の参照でエラーが出てしま...
-
生成したインスタンスを削除す...
-
C#において、同じインスタンス...
-
他のファイルの変数参照
-
ASPX(C#)で別ファイルで自分で...
-
エクセル(複数インスタンス)...
-
Javaによる数値計算 高速化
-
フォームの存在をチェックする方法
-
非staticフィールドを参照でき...
-
「インスタンス」の意味をわか...
-
【java】コンストラクタの処理...
-
VB.netで標準モジュールからフ...
-
オブジェクト参照がオブジェク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報