• ベストアンサー

実行時エラー-2147217900(80040e1

アクセスVBAです。 Set cn = CurrentProject.Connection rs.Open "T_test", cn, adOpenKeyset, adLockOptimistic としたときに、T_testと言うテーブル名は存在するのに、 「実行時エラー-2147217900(80040e14) SQLステートメントが正しくありません Delete、Insert、Procedure、SelectまたはUpdateを使用して下さい。」 と言うエラーが発生します。 どうしてテーブルが存在するのにこのエラーが発生するのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • siranagi
  • ベストアンサー率23% (3/13)
回答No.1

直接の回答でなくてすみませんが http://www.accessclub.jp/bbs2/0128/beginter38279.html ここ見てわかるならこれが答えになるかと思います

enakhicr
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • E_FAIL状態とはどういう状態でしょうか?

    アクセスADOなのですが Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic For i = 1 To rs.RecordCount を実行しようとすると 実行時エラー -2147467259(80004005) 「データプロバイダまたはほかのサービスがE_FAIL状態を返しました」 と言うエラーが発生します。 https://support.microsoft.com/ja-jp/kb/168336 を読んでみたのですが、よく意味がわかりません。 それに、同じコードで今まで動いてたのですが T_テーブルにデータを追加したら、 上記のエラーが発生するようになりました。

  • アクセス ADO

    Tテーブルと言うファイルは存在するのに、 Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "Tテーブル", cn, adOpenStatic, adLockPessimistic rs.Sort = "順番 ASC" を実行すると 「実行時エラー-2147217900(80040e14) SQLステートメントが正しくありません Delete、Insert、Procedure、SelectまたはUpdateを使用して下さい。」 が発生します。 rs.CursorLocation = adUseClient は問題なく通過する為、 Tテーブルと言うオブジェクトが存在しない為のエラーなのかなと思いましたが Tテーブルは存在します。 http://www.accessclub.jp/bbs2/0128/beginter38279.html を見たのですが 私の場合はクエリではなくテーブルなので パラメーターは関係ないと思っています。

  • 実行時エラー'9':インデックスが有効範囲にありま

    WindowsXPで、Access2002を使用しています。 テーブル1のフィールド1の値を、ハイフン区切りで分割して、フィールド2とフィールド3へ格納するVBAを作成しようとしていますが、あと少しのところでエラーになってしまって解決策が見当たりません。 エラー内容は、「実行時エラー'9':インデックスが有効範囲にありません。」で、下記VBAの rs.Update "フィールド3", ksplit(1) の部分のksplit(1)の格納場所が無かった為に発生していると思います。 実際、その部分を無効にすると、エラーは無くなりますが、フィールド3のデータも必要です。 このようになって欲しいです。 例) テーブル1 フィールド1 フィールド2 フィールド3 1000-100       1000       100 50-301         50       301 Private Sub コマンド0_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic Do Until rs.EOF Dim ksplit As Variant ksplit = Split(rs!フィールド1, "-") rs.Update "フィールド2", ksplit(0) rs.Update "フィールド3", ksplit(1) Debug.Print rs!フィールド2,rs!フィールド3 rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上、初心者で、行き詰っておりますので、よろしくお願いします。

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • 半角のカッコを使ってテーブル名を名付けてしまったの

    半角のカッコを使ってテーブル名を名付けてしまったのですがADOでエラーになります。 試しに、 半角() 全角() と言うテーブルを作成して、 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & CurrentProject.FullName rs.Open "全角()", cn, adOpenKeyset, adLockOptimistic rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub としたら、全角()の場合は問題なく動きました。 しかし、 rs.Open "半角()", cn, adOpenKeyset, adLockOptimistic にした場合は    ---------------------------------------------------------------------    実行時エラー'-2147217900(80040e14)':    SQLステートマントが正しくありません。'DELET','INSERT','PROCEDURE','SELECT',    または'UPDATE'を使用してください。    --------------------------------------------------------------------- となります。 実はたくさんのテーブル名とクエリ名に半角カッコを使ってしまって、 治す方が手間がかかるので、ADOで半角カッコを使えるのなら使いたいのです。 オブジェクト名でも使用できる方法・読み取れる方法が知りたいのですが、ご存知でしょうか?

  • 実行時エラー-2147217904

    rs.CursorLocation = adUseClient rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic の部分で、 実行時エラー-2147217904 「1つ以上の必要なパラメータの値が設定されていません」 となるのですが、どういうことでしょうか? やはりSql文に問題があるのでしょうか?

  • 【ADO】「Filter」を使うか「WHERE」を使うか

    こんばんは。 アクセス2003です。 「Filter」を使うか「WHERE」を使うかべきかわからないので教えてください。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Sub test1() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル WHERE 'フィールド1'='りんご", cn, adOpenKeyset, adLockOptimistic rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub Sub test2() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'" & "りんご" & "'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上のふたつのステートメントは Tテーブルのフィールド1にりんごの文字が入力されているレコート゛を抽出します。 いくつかこのような動作をするプログラムを書くのですが どちらのほうがコート゛として適していますか? WHEREを使うtest1の方がコート゛が短くなるからいいのでしょうか? というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。 よろしくお願い致します。

  • rs.MoveFirst

    アクセスvbaです。 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Long Set cn = CurrentProject.Connection rs.Open "Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst '←これいらない? For i = 1 To rs.RecordCount rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようなコードの場合 rs.MoveFirst はあってもなくても変わらないですか?

  • 一度変数に格納すればフィルタができるのですが

    Set cn = CurrentProject.Connection rs.Open "Qクエリ", cn, adOpenKeyset, adLockOptimistic myStr = "(数 = 0) And (名 = 'test') " rs.Filter = myStr なら問題なくフィルタができるのですが、 rs.Filter = "(数 = 0) And (名 = 'test') " とすると、 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になります。 なぜか一度変数に格納すればフィルタができるのですが そんなことありますか? 変数を介さないとエラーになるなんてありますか? エラーの原因は変数を介さない事なのでしょうか? アクセスです。

  • BeforeUpdateのADOの記述でエラー

    Access VBAです。 フォームの対象商品コードを入力後、他の項目にカーソルを移動すると 実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。 というメッセージが表示され、 rs.Open "商品T", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect が黄色くなります。 コーディングは、以下の通りです。 Option Compare Database Option Explicit Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() 'フォームの読み込み時 Set cn = CurrentProject.Connection 'DB接続 End Sub Private Sub 対象商品コード_BeforeUpdate(Cancel As Integer) rs.Open "商品T", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect Set rs = New ADODB.Recordset rs.Index = "PrimaryKey" rs.Seek 対象商品コード, adSeekFirstEQ If rs.EOF Then MsgBox ("該当する商品は存在しませんでした。") Else 対象商品名.Caption = rs!商品名 End If End Sub

専門家に質問してみよう