お世話になります。
Access2000を使用しております。
削除ボタン(cmd削除)を用いてリストボックス(lst一覧)で選択したレコードをテーブルから削除したいのですが、以下の●→の個所でエラーがでて困っております。
サンプルコードをコピーして使用しております故、原因・理由が解りません。
何方かご教授の程よろしくお願いいたします。
---
Private Sub cmd削除_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim var条件 As Variant
Dim var行 As Variant
Dim mySQL As String
Dim i As Long
For Each var行 In Me.lst一覧.ItemsSelected
var条件 = var条件 & IIf(Not var条件 = "", ",", "") & _
Me.lst一覧.Column(0, var行)
Next
If Not var条件 = "" Then
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
mySQL = "SELECT * FROM T_自社情報 WHERE ID IN (" & var条件 & ")"
●→ rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
rs.Delete
rs.MoveNext
Loop
For i = 0 To Me.lst一覧.ListCount - 1
Me.lst一覧.Selected(i) = False
Next
Me.lst一覧.Requery
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End If
End Sub
---
実行時エラー -2147217904
(1つ以上の必要なパラメータの値が設定されていません。)
T_自社情報の各フィールド
自社No. (オートナンバー)
会社名
郵便番号
住所
TEL
FAX
備考
No.4ベストアンサー
- 回答日時:
s_husky です。
複数選択可能な設定で複数レコードを削除したい。
しかも、リストは複数の列であるということですね。
よく読まなかったもので済みません。
Private Sub コマンド0_Click()
Dim I As Integer
Dim N As Integer
N = Me.リスト_削除対象.ListCount - 1
For I = 0 To N
If Me.リスト_削除対象.Selected(I) Then
CnnExecute "DELETE FROM Table1 WHERE ID=" & _
Me.リスト_削除対象.Column(0, I)
End If
Next I
End Sub
ありがとうございます。とても助かります。
上記の指示頂いたコードで早速試してみたところ、CnnExecuteの箇所でエラーが出てしまいます。
何度も申し訳ありませんが、再度ご教授お願いできないでしょうか。
よろしくお願いします。
No.7
- 回答日時:
s_husky です。
同じエラーを返すことに成功しました。
? CnnExecute( "DELETE FROM TEST WHERE IDD=3")
False
つまり、Access.adp ではなく Access.mdb でテストしました。
単なるテーブル名か列名のミスです。
Access.adp と Access.mdb とではエラー内容が違っていました。
重ね重ねのミスお詫びします。
ありがとうございます。
>単なるテーブル名か列名のミスです。
との事ですが、表記のミスでしょうか。
それとも何か使用してはいけない文字を使用しており
それによるミスなのでしょうか。
No.6
- 回答日時:
s_husky です。
CnnExecute 関数が感知したエラーを表示しています。
ですから、何らかの理由でSQL文の実行時にエラーが発生しています。
Private Sub コマンド0_Click()
CnnExecute "Delete FROM T_自社情報 WHERE ID=3"
End Sub
ところで、これを実行すると、列[ID]=3のレコードが削除されます。
エラーは確認されません。
ということは、SQL文そのものには誤りはないと考えられます。
また、SQL文のエラーは、それはそれとして返ってくる筈です。
もしかしたら、[T_自社情報]自体をオープンできますか?
それ自体がクエリか何かでパラメータに問題があるとか・・・。
判りません。
※ウーン!これは、経験豊かなプロの出番かも・・・。
※力不足ですみません。
No.5
- 回答日時:
s_husky です。
以下の関数を適当なモジュールにコピペして下さい。
一応、トランザクションのロールバック機能もあります。
一応、CnnErrors も表示します。
Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & CnnErrors.Description & Chr$(13) & _
"・Err.Number=" & CnnErrors.Number & Chr$(13) & _
"・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " ADO関数エラーメッセージ"
End Sub
Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
Dim isOK As Boolean
Dim cnn As ADODB.Connection
isOK = True
Set cnn = CurrentProject.Connection
With cnn
.Errors.Clear
.BeginTrans
.Execute strSQL
.CommitTrans
End With
Exit_CnnExecute:
On Error Resume Next
cnn.Close
Set cnn = Nothing
CnnExecute = isOK
Exit Function
Err_CnnExecute:
isOK = False
If cnn.Errors.Count > 0 Then
ErrMessage cnn.Errors(0), strSQL
cnn.RollbackTrans
Else
MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
vbExclamation, " 関数エラーメッセージ"
End If
Resume Exit_CnnExecute
End Function
本当にありがとうございます。
早速上記のコードを示唆通りコピペしたところ、以下のメッセージが表示されます。
また、何度も申し訳ありませんがご教授の程よろしくお願い致します。
m(__)m
ADO関数エラー
Err.Discription =1つ以上の必要なパラメータの値が設定されていません。
Err.Number = -2147217904
SQL State =
SQL Text=Delete FROM T_自社情報 WHERE ID=3
No.3
- 回答日時:
s_husky です。
もしかして、選択したリストだけを削除するのであれば次のようです。
Private Sub コマンド0_Click()
CnnExecute "DELETE FROM Table1 WHERE ID=" & _
Me.リスト_削除対象.ItemData(Me.リスト_削除対象.ListIndex)
End Sub
No.2
- 回答日時:
少し、ルーチンが複雑かなと思いました。
次のように書くことも可能かと思います。
Private Sub コマンド0_Click()
Dim I As Integer
Dim N As Integer
N = Me.リスト_削除対象.ListCount - 1
For I = 0 To N
CnnExecute "DELETE FROM Table1 WHERE ID=" & Me.リスト_削除対象.ItemData(I)
Next I
End Sub
長く、なりますので CnnExecute 関数は後ほど補足します。
No.1
- 回答日時:
検証したわけではありませんが気になったのは
『var条件 = ""』で十分なのか。
Debug.Print で何が格納されているか。,,,,,,,,,,
レコードセットを回さずとも
mySQL = "SELECT * FROM ・・・をmySQL = "Delete * FROM・・・
にして
cn.Execute mySQL ・・・
にした方が速いのではないか。
ボケレス御免
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
エクセルマクロで指定範囲内の...
-
GROUP BYでエラーが発生
-
sqlで文字列を最後に追加したい
-
SQLのエラー(~付近に不適切な...
-
バッチファイルからのBCP起動に...
-
SQLserverのIF文について
-
PostgreSqlでFunctionの作成に...
-
ノートンインターネットセキュ...
-
ACCESSで作成したアプリケーシ...
-
エクセルのグループボックス枠...
-
オブジェクト名 '<table>' が無...
-
ファイアホースモードエラーに...
-
VB6より長文INSERT文でORA1756...
-
レポートが開けない。
-
SQLServerが存在しないか、アク...
-
クエリの存在チェック
-
SQLServer2005(SQLEXPRESS)
-
SQL Severのクエリ異常
-
Access2000でDAOを使用したとき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
SQLのエラー(~付近に不適切な...
-
PostgreSqlでFunctionの作成に...
-
GROUP BYでエラーが発生
-
エクセルマクロで指定範囲内の...
-
ACCESS ADOでupdateが効かない
-
ACCESSで作成したアプリケーシ...
-
sqlで文字列を最後に追加したい
-
エクセルからSQLサーバー ...
-
オブジェクト名 '<table>' が無...
-
SQLserverのIF文について
-
バッチファイルからのBCP起動に...
-
SQLServerが存在しないか、アク...
-
エクセルのグループボックス枠...
-
@@ERRORと@@ROWCOUNT併用について
-
ストアドの戻り値(配列)について
-
レポートが開けない。
-
Accessのレポートが新規作成で...
-
Access2000環境に対応するMid関...
-
自作関数を含んだクエリをエク...
おすすめ情報