![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルからのBCP起動に...
-
PostgreSqlでFunctionの作成に...
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
GROUP BYでエラーが発生
-
オブジェクト名 '<table>' が無...
-
Access2000環境に対応するMid関...
-
ACCESSで作成したアプリケーシ...
-
ストアドの戻り値(配列)について
-
エクセルからSQLサーバー ...
-
sqlで文字列を最後に追加したい
-
AccessのエラーチェックでFキー...
-
SQLServer2005(SQLEXPRESS)
-
分散トランザクションを開始で...
-
レポートが開けない。
-
SQLServer・ストアドプロシージ...
-
oo4oのMovePreviousnメソッドに...
-
Access2000でDAOを使用したとき...
-
全ストアドを対象に文字列を置...
-
エクセルマクロで指定範囲内の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
SQLのエラー(~付近に不適切な...
-
エクセルマクロで指定範囲内の...
-
PostgreSqlでFunctionの作成に...
-
GROUP BYでエラーが発生
-
ACCESSで作成したアプリケーシ...
-
ACCESS ADOでupdateが効かない
-
Access2000環境に対応するMid関...
-
sqlで文字列を最後に追加したい
-
オブジェクト名 '<table>' が無...
-
レポートが開けない。
-
バッチファイルからのBCP起動に...
-
ACCESS2000ディスクまたはネッ...
-
oo4oのMovePreviousnメソッドに...
-
エクセルのグループボックス枠...
-
SQLserverのIF文について
-
何も表示されない実行時エラー...
-
エクセルからSQLサーバー ...
-
クエリの存在チェック
-
SQLServerが存在しないか、アク...
おすすめ情報