excel vbaでaccessテーブルへデータを送る以下のよ

Writer: admin Type: iPhone Date: 2019-03-06 00:00
excel vbaでaccessテーブルへデータを送る以下のようなvbaでaccessに項目を送ろうとしています。Public Sub macro1() Dim i As Integer Dim ssql As String Dim j As Integer Dim longend As Long UserForm1.Show vbModeless DoEvents For i = Application.ActiveWorkbook.ActiveSheet.Index To Application.ActiveWorkbook.Sheets.Count longend = Application.ActiveWorkbook.Sheets(i).Range("A65536").End(xlUp).Row For j = 4 To longend With Application.ActiveWorkbook.Sheets(i) ssql = "delete from [データベース名] where 日付 = '" ssql = ssql & .Cells(j, 1) & "'" & _ "AND コード ='" & .Cells(1, 27) & "'" End With Call excutesql(ssql) With Application.ActiveWorkbook.Sheets(i) ssql = "INSERT INTO [データベース名] ([項目名]) values ('" ssql = ssql & .Cells(j, 1) ssql = ssql & "','" ssql = ssql & .Cells(j, 2) ssql = ssql & "','" ssql = ssql & .Cells(j, 4) ssql = ssql & "','" ssql = ssql & .Cells(j, 5) ssql = ssql & "','" ssql = ssql & .Cells(j, 6) ssql = ssql & "','" ssql = ssql & .Cells(j, 19) ssql = ssql & "','" ssql = ssql & .Cells(j, 20) ssql = ssql & "','" ssql = ssql & .Cells(j, 21) ssql = ssql & "','" ssql = ssql & .Cells(j, 22) ssql = ssql & "','" ssql = ssql & .Cells(j, 23) ssql = ssql & "','" ssql = ssql & .Cells(j, 25) ssql = ssql & "','" ssql = ssql & .Cells(j, 26) ssql = ssql & "','" ssql = ssql & .Cells(1, 27) ssql = ssql & "','" ssql = ssql & .Cells(2, 27) ssql = ssql & "','" ssql = ssql & .Cells(1, 30) ssql = ssql & "','" ssql = ssql & .Cells(2, 30) ssql = ssql & "','" ssql = ssql & .Cells(2, 33) ssql = ssql & "')" End With Call excutesql(ssql) Next Next i Unload UserForm1 MsgBox "送信終了しました"End SubPublic Sub excutesql(ByVal ssql As String) Dim CN As String Dim db As ADODB.Connection Set con = New ADODB.Connection CN = "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=[ユーザー名]; UID=[ID]; PWD=[パスワード];" con.Open (CN) con.Execute (ssql) con.Close Set con = Nothing End Sub会社の営業所から、本社のoracleデータベースにデータを送ろうとしているのですが、転送している途中でエクセルが「応答なし」となってしまい、最後まで完了しません。また固まってしまうので、運よくデバックしたりすると「closeメソッドは失敗しましたconnectionオブジェクト」といったエラーメッセージも出てきます。何か設定が必要なのでしょうか?また物理的に無理なのでしょうか?かなり困っています。お願いします。この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。###>INSERT INTO [データベース名] ([項目名]) values ('" ssql = ssql & .Cells(j, 1)これだとデータベース側でデータ型の変換を実行する必要があるので極めて遅くなります。ADODB.Parameteオブジェクトにデータ型と値を設定してデータベースへ渡す「パラメータクエリ」と呼ぶやり方で実行すればかなり高速になると思います。「ADODB.Commandのパラメータ埋め込みクエリーを出力 」http://kagen88.blogspot.jp/2012/12/adodbcommand.html上記ページはSQLサーバですが、プレースホルダ(SQL文中の 列名 = ? の?部分)をOracle用に変更すれば同じような処理で動作させることができます。CN = "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=[ユーザー名]; UID=[ID]; PWD=[パスワード];"また、ODBCを利用するならODBCデータソースを設定しておいて、DSNを指定して接続できるようにした方が高速に動作するのではと思います。そして、Oracleのドライバをインストールできるのでしたら、純正ドライバの方が高速な動作を期待できるのではと思います。こちらが参考になると思います。「[Windows]VBAからOracleに接続する方法 」http://skill-note.net/post-822/ナイス0
###ありがとうございます。http://kagen88.blogspot.jp/2012/12/adodbcommand.htmlの、「使い方」の事例ですか? strR = Replace(strR, "?", vntP(inti), 1, 1) の?の部分ですか?これでテーブルにインサートされるのでしょうか?理解度低く申し訳ありません。
###丁寧に対応いただき、本当に助かりました。ありがとうございました。今後ともよろしくお願いいたします。もう少し、きちんと勉強します。

 

TAG