2016-11-04 4 views
1

エクセルでデータベースにアクセスできますが、2度目にアクセスしようとすると問題が発生します。私の後ろに何かが残っているように見えますが、私は何を理解していません。3027 "Can not update。データベースまたはオブジェクトが読み取り専用です。"エクセルからテーブルを作成した後

Dim con As ADODB.Connection 
Dim cmd As ADODB.Command 
Dim strInput As String 

Set con = New ADODB.Connection 
Set cmd = New ADODB.Command 
strInput = Sheets("base_pivot").Range("I4").Value 
'I get the input for the parameter from my sheet base_pivot on the cell I4 

With con 
    .Provider = "Microsoft.ACE.OLEDB.12.0" 
    .Open "C:\cmo_accounting\CMO_accounting.mdb" 
End With 

With cmd 
    .ActiveConnection = con 
    .CommandText = "mk_edu_ana_invoices" 
    .CommandType = adCmdStoredProc 

    .Parameters.Append cmd.CreateParameter("[input_code_ana]", adChar, adParamInput, 5) 
    .Parameters("[input_code_ana]") = strInput 
End With 

cmd.Execute 

con.Close 

Set cmd = Nothing 
Set prm = Nothing 
Set con = Nothing 

これは初めて使用したときに動作し、Excelファイルを再度開くとすぐに再び動作します。それは、Excelが閉じられたときに接続が閉じられているようです。

+0

私が見つけたことのいくつかは、どちらかが違いを生むかどうかはわかりません。どこで 'strPath'を定義しましたか? ( 'option explicit'を使うとこれらの問題を避けることができます)。また、Range( "I4:I4") 'は単純に' .Range( "I4")になります。 – CallumDA

+0

ちょっと、strPathの変更を行いました。範囲I4の変更を行います。ありがとう! –

+0

このマクロ(サブまたは関数)はどこにあり、どのようにトリガーされていますか?ワークブックの別の場所に別のデータベース接続がありますか? – Parfait

答えて

0

最後に私は私の質問に対する答えを見つけました。それは私のExcelファイルのクエリにリンクされていました。私は自分のアクセスファイルからデータをリフレッシュするときに、アクセスファイルを開いたままにしました。私は前にこのような問題はなかったので、私は本当にそれが私のVBAコードであると思った。私がしなければならなかったのは、接続文字列を「共有を拒否する」から「共有を拒否しない」に変更することでした。

ご協力いただきありがとうございます。

関連する問題