![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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も見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
複数SQL発行について
Visual Basic(VBA)
-
SQL文 複数実行
SQL Server
-
CloseとDisposeの違い
Visual Basic(VBA)
-
-
4
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
5
VBA内でSQL(UPDATEをループ処理)したいのですが
Access(アクセス)
-
6
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
7
どこにもフォーカスを当てたくない
Access(アクセス)
-
8
レコードが存在しなかった場合
Microsoft ASP
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
複数のクエリーをVBで書く方法を教えてください。
その他(データベース)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
ACCESS VBAの実行時エラーなんですが
PowerPoint(パワーポイント)
-
13
SQLでエラーです。
Visual Basic(VBA)
-
14
セルの値を取得してSQL文に組み込みたい
SQL Server
-
15
VBでSQL文のUPDATE構文を使った時のエラーについて
Visual Basic(VBA)
-
16
「RunSQL」と「Execute」の違い
Access(アクセス)
-
17
like演算子内に変数って使えないんですか?
その他(プログラミング・Web制作)
-
18
メッセージボックスを大きくする方法
Visual Basic(VBA)
-
19
EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なる
Visual Basic(VBA)
-
20
ADO VBA 実行時エラー3021
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
インスタンスを同じ名前で作成...
-
VB.NET getとsetの概念がわかり...
-
オブジェクト参照がオブジェク...
-
[Visual C#] 優先される処理に...
-
インスタンス参照でアクセスで...
-
SAPでいう「インスタンス」って...
-
新規契約でUQモバイル申し込も...
-
エクセルVBAで、条件に一致する...
-
onClickで関数呼出し後に、結果...
-
JavaでのDirectXの使用
-
java gui のイベント処理が重い
-
DataGridViewの行追加について。
-
Javaのクラスのstaticメソッド...
-
どうしてListオブジェクトをIte...
-
ATLとMFCの違いは何でしょうか?
-
iterator とiterableの関係がわ...
-
EXCEL VBAにて動的にCheckBOXを...
-
ドラッグして矩形を描くには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
「インスタンス」の意味をわか...
-
変数の参照でエラーが出てしま...
-
SQLを連続発行する時の正しい(?...
-
オブジェクト参照がオブジェク...
-
文字列を日付に変換でParseExce...
-
VB6.0で、DLLを動的に参照したい
-
javaのクラスの作り方、エラー...
-
インスタンスを同じ名前で作成...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
おすすめ情報