Microsoft Access 掲示板

エラーに悩まされています

8 コメント
views
4 フォロー

自分が作ったアクセスのファイル(サーバーに置いたもの)を今まで問題なく使ってきましたが、最近別の方にも使ってもらうことになり、同場所に置いたファイルを利用させたところ、自分には出ないエラーが出たりします。
以前ここで教えていただいたコードを利用しており、具体的に言うとトップページのテキストボックスに別アプリのデータをコピペしたものを貼り付け、データ追加ボタンをクリックすると、レコードが追加されるという内容です。
自分の環境ではメッセージは「追加クエリですべてのレコードを追加できません。」といったものだけなのですが(これは理解していますので問題ありません)

他の方の環境では、2件のデータを追加しようとすると
「2件のレコードが指定したテーブルから削除されます。」
⇒ポップアップに対して「はい」
「追加クエリを実行すると、テーブルのデータが変更されます」
⇒ポップアップに対して「はい」
「2件のレコードを追加します。」
⇒ポップアップに対して「はい」
「追加クエリですべてのレコードを追加できません」
⇒ポップアップに対して「はい」
「更新クエリを実行すると、テーブルのデータが変更されます。
⇒ポップアップに対して「はい」
「●●●件のレコードが更新されます」←●●●は追加先テーブルのすべてのレコード数

ここではいを押すのをやめました…。
また、他の方の環境では立ち上げ自体も重く感じます。
同じサーバーに置いたデータを扱っているのに、何が変わってくるのでしょうか…。
理解不足で申し訳あり前ませんが、何卒よろしくお願いいたします。

具体的なコードは以下になります。
※途中でいくつか、取り込んだデータの内容を変更するクエリを実行させているの(たとえばある条件であれば、フラグを立てるクエリとか)ですが直接関係ないと思ったので抜いています。

Private Sub btnデータ追加_Click()
    '前回のデータを削除する
    DoCmd.RunSQL "DELETE * from T_案件データ"
             
    If Me.txtデータ.Value = "" Then
    MsgBox "テキストボックスが空です。"
    Exit Sub
        
    ElseIf IsNull(Me!txtデータ) Then
    MsgBox "テキストボックスが空です。"
    Exit Sub

    Else
    'テキストボックス内のデータを追加する
    Call AddData("T_案件データ", Me.txtデータ)
    Me.txtデータ.Value = ""
    
    End If  
    
        
'今取り込んだデータを開く
       DoCmd.OpenForm "F_案件", , , " 案件NO In (SELECT  案件NO FROM T_案件データ)"

End Sub
Private Sub AddData(tblname As String, ByRef S As String)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim a, i As Long, j As Long
    Dim Datas

    Set db = CurrentDb
    Set rs = db.OpenRecordset(tblname)
    a = Split(S, vbNewLine)
    For i = 0 To UBound(a)
        Datas = Split(a(i), vbTab)
        rs.AddNew
        On Error Resume Next
        For j = 0 To UBound(Datas)
            rs(j) = Datas(j)
        Next
        On Error GoTo 0
        rs.upDate
    Next
    
End Sub
どんぐりず
作成: 2021/05/15 (土) 09:37:07
最終更新: 2021/05/15 (土) 17:08:06
通報 ...
1
りんご 2021/05/15 (土) 13:56:44 48103@0e907

もしかして、AddDataのコードが、上記の他にありませんか?
例えば、
【うどん屋プロシージャの呼び出し】
Call うどん屋("きつねうどん", "400円")
【うどん屋プロシージャの記述】
……

2
どんぐりず 2021/05/15 (土) 14:05:33 9099b@6e6cd >> 1

失礼しました。おっしゃるとおり、以前ここで教えていただいたAddDataのコードがあります。本文に追記しました!

3
りんご 2021/05/15 (土) 15:41:33 48103@0e907

 試していないので、あれですけど、例えば、
AddNew「10件のレコードを追加します。」
On Error Resume Next「1件」
Update「9件のレコードが更新されます」
という現象でしょうか?
 それとも、
AddNew「10件のレコードを追加します。」
On Error Resume Next「1件」
Update「100件のレコードが更新されます」
という現象でしょうか?

4
どんぐりず 2021/05/15 (土) 17:08:36 9099b@6e6cd >> 3

ごめんなさい、質問の内容が理解できなかったため、本文を少し具体的に修正しました。

5
りんご 2021/05/15 (土) 18:04:02 48103@0e907 >> 3

 AddDataのコードには、レコードを追加したら、(追加を確定する為に)更新すると書いてあるので、
確認メッセージ「●件のレコードが更新されます」が出るのは、正常に見えます。
 2件のレコードを編集する流れで、●●●件、つまり、3桁のレコードを変更する確認メッセージが出るならば、異常と考えて、例えば、For〜Next処理をdebug.printしてみるか、上記以外のコードを見直す感じでしょうか。

6
どんぐりず 2021/05/15 (土) 21:37:31 9099b@6e6cd >> 5

ありがとうございます。
コードを見直すということですが、1つ気になっているのが、自分の環境だと全くエラーが出ないのに、他の環境だとエラーが出ることです。
他の部分でも同じようなことが起こらないかと危惧しています。
これはどういった原因が考えられるでしょうか?

7
りんご 2021/05/16 (日) 18:53:19 48103@0e907 >> 5

 他の人は、旧バージョンを開いているとか?
 とりあえず「●●●件のレコードが更新されます」を試しに実行して、テーブルの中身を確認しましょう。全件削除実行からの一連の流れなので、何か問題が起きれば、手動全件削除で元に戻せますよね。
 前回のデータが残っているなら、全件削除のコードを比較。ループデータが残っているなら、For 〜Nextの中で、datasやrs(j)をdebug.printを比較。
 確認メッセージが出る出ないは、DoCmd.SetWarningsのコードがどこかにありませんか?
 確認した結果を教えてくれると、嬉しいな。

8
どんぐりず 2021/05/17 (月) 00:26:57 修正 0029a@1c915 >> 5

ありがとうございました!
>確認メッセージが出る出ないは、DoCmd.SetWarningsのコードがどこかにありませんか?

こちらを参考に、改めて確認したところ
自分の環境では確認メッセージを出さないように設定しており、
他の環境では設定してもらうか、マクロ、VBAでの制御が必要と知りました。
VBAで制御したところ、メッセージが出なくなりました。

大変助かりました。ありがとうございました。

同じ悩みの方のため、参考サイトのリンクを貼っておきます。
AccessVBAでクエリ実行時の確認メッセージを完全に非表示にする方法