自分が作ったアクセスのファイル(サーバーに置いたもの)を今まで問題なく使ってきましたが、最近別の方にも使ってもらうことになり、同場所に置いたファイルを利用させたところ、自分には出ないエラーが出たりします。
以前ここで教えていただいたコードを利用しており、具体的に言うとトップページのテキストボックスに別アプリのデータをコピペしたものを貼り付け、データ追加ボタンをクリックすると、レコードが追加されるという内容です。
自分の環境ではメッセージは「追加クエリですべてのレコードを追加できません。」といったものだけなのですが(これは理解していますので問題ありません)
他の方の環境では、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
もしかして、AddDataのコードが、上記の他にありませんか?
例えば、
【うどん屋プロシージャの呼び出し】
Call うどん屋("きつねうどん", "400円")
【うどん屋プロシージャの記述】
……
失礼しました。おっしゃるとおり、以前ここで教えていただいたAddDataのコードがあります。本文に追記しました!
試していないので、あれですけど、例えば、
AddNew「10件のレコードを追加します。」
On Error Resume Next「1件」
Update「9件のレコードが更新されます」
という現象でしょうか?
それとも、
AddNew「10件のレコードを追加します。」
On Error Resume Next「1件」
Update「100件のレコードが更新されます」
という現象でしょうか?
ごめんなさい、質問の内容が理解できなかったため、本文を少し具体的に修正しました。
AddDataのコードには、レコードを追加したら、(追加を確定する為に)更新すると書いてあるので、
確認メッセージ「●件のレコードが更新されます」が出るのは、正常に見えます。
2件のレコードを編集する流れで、●●●件、つまり、3桁のレコードを変更する確認メッセージが出るならば、異常と考えて、例えば、For〜Next処理をdebug.printしてみるか、上記以外のコードを見直す感じでしょうか。
ありがとうございます。
コードを見直すということですが、1つ気になっているのが、自分の環境だと全くエラーが出ないのに、他の環境だとエラーが出ることです。
他の部分でも同じようなことが起こらないかと危惧しています。
これはどういった原因が考えられるでしょうか?
他の人は、旧バージョンを開いているとか?
とりあえず「●●●件のレコードが更新されます」を試しに実行して、テーブルの中身を確認しましょう。全件削除実行からの一連の流れなので、何か問題が起きれば、手動全件削除で元に戻せますよね。
前回のデータが残っているなら、全件削除のコードを比較。ループデータが残っているなら、For 〜Nextの中で、datasやrs(j)をdebug.printを比較。
確認メッセージが出る出ないは、DoCmd.SetWarningsのコードがどこかにありませんか?
確認した結果を教えてくれると、嬉しいな。
ありがとうございました!
>確認メッセージが出る出ないは、DoCmd.SetWarningsのコードがどこかにありませんか?
こちらを参考に、改めて確認したところ
自分の環境では確認メッセージを出さないように設定しており、
他の環境では設定してもらうか、マクロ、VBAでの制御が必要と知りました。
VBAで制御したところ、メッセージが出なくなりました。
大変助かりました。ありがとうございました。
同じ悩みの方のため、参考サイトのリンクを貼っておきます。
AccessVBAでクエリ実行時の確認メッセージを完全に非表示にする方法