• ベストアンサー

カッコ付のオブジェクト名を指定できないという事でし

アクセスでadoを使ってレコードセットを開く時に rs.Open "Q_(クエリ名)", cn, adOpenStatic, adLockPessimistic とするとエラーになります。 しかし、 Q_(クエリ名)というクエリは作成できたし、問題なく開けます。 adoの時は、カッコ付のオブジェクト名を指定できないという事でしょうか?

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

  • ベストアンサー
noname#212058
noname#212058
回答No.2

手元に Access が無いので未確認ですが、このような場合はオブジェクト名を [] で囲む仕様のはずです。 rs.Open "[Q_(クエリ名)]", cn, adOpenStatic, adLockPessimistic

ttisldyv
質問者

お礼

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

その他の回答 (1)

回答No.1

https://support.microsoft.com/ja-jp/kb/826763 カッコを外すと動きますから、使えないということでしょうね。

ttisldyv
質問者

お礼

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

関連するQ&A

  • アクセス ADO レコードの件数がおかしい

    アクセスADOでクエリの行数を取得したいのですが クエリが200行でも100行でも必ず12が返ります。 クエリ1は、一度12行の時にadoで数を取得し、その時は、正しく12が返ったのですが、 行数が変わっても12が返ります。 コードは、 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM クエリ1", cn, adOpenStatic, adLockPessimistic Debug.Print rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub です。 Debug.Print DCount("*", "クエリ1") だと、正しいレコード数が取得されるのですが、ADOだとおかしいです。 クエリ1のSQL文は、 SELECT Q_作業用.* FROM Q_作業用; のように、別のクエリを持ってきています。 何が原因なのでしょうか? よろしくお願いします。

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

    半角のカッコを使ってテーブル名を名付けてしまったのですが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で半角カッコを使えるのなら使いたいのです。 オブジェクト名でも使用できる方法・読み取れる方法が知りたいのですが、ご存知でしょうか?

  • ADO 複数条件のフィルタが出来ない

    カテゴリ サイズ 牡蠣 大 牡蠣 小 牡蠣 小 のようなクエリ(Qクエリ)があります。 --------------------------------------------------------------------- strカテゴリ="牡蠣" strサイズ="大" Set cn = CurrentProject.Connection rs.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rs.Filter = "カテゴリ = '" & strカテゴリ & "' And サイズ = '" & strサイズ & "'" Debug.Print rs.RecordCount --------------------------------------------------------------------- とすると、 大は1レコードなのに3が返ります。 更に、 strサイズ="小"にすると0がかります。 ウォッチウインドウで見たら、「大」の時は --------------------------------------------------------------------- : Filter : "カテゴリ = '牡蠣' And サイズ = '大'" : Variant/String : : RecordCount : 3 : Long : --------------------------------------------------------------------- になっています。 どうしてこのような現象が起きるのでしょうか? レコードの「小」がADOだと「大」と読んでいます。 アクセス2010です。

  • オブジェクトが開いている場合は、操作は許可されませ

    エクセルvbaです。 ADOを使ってループしているのですが 前回のループで rs.Close: Set rs = Nothing をしなかったために rs.Open strSQL, cn, adOpenStatic, adLockOptimistic で 「オブジェクトが開いている場合は、操作は許可されません」 となるので、 イミディエイトウインドウで rs.Close: Set rs = Nothing としてるのに、 実行時エラー 3219 このコンテキストで操作は許可されていません。 となります。 rs.Closeだけでも同じエラーです。 この状態で、vbaを中断せずに rs.Open strSQL, cn, adOpenStatic, adLockOptimistic を通過させるにはどうすればいいですか?

  • adoでBetween は使えないのでしょうか?

    ADOで期間で抽出したいのですが rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 = #2015/01/01#" は問題なく通るのですが、 rs.Open strテーブル, cn, adOpenStatic, adLockPessimistic rs.Filter = "計上日 Between #2015/01/01# And #2015/01/31#" だと 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 と言うエラーになります。 adoでBetween は使えないのでしょうか?

  • WHERE と Filter

    アクセスのADOで rs.Open "SELECT * FROM テーブル1 WHERE フィールド1=あ", cn, adOpenStatic, adLockOptimistic とするのと、 rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic rs.Filter = "フィールド1゛ = 'あ'" とするのでは、 どちらの方が処理速度が速いですか?

  • アクセスでADO 並べ替えが適用できない

    アクセスでADOを使っているのですが、 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "SELECT * FROM Q1", cn, adOpenStatic, adLockPessimistic rs.Sort = "受付日 DESC" For i = 1 To rs.RecordCount ・ ・ ・ このようなコードを作っていますが、 rs.Sortの部分で、「並べ替えを適用できません」になります。 レコード数は、15000件くらいです。 なぜ並べ替えができないのでしょうか? しょうがないからクエリで最初から並べ替えしておきますが、原因を教えてください。

  • アクセス 取得される件数が違う

    Q一覧というクエリは実際は300レコードアリ、フィルタ後200レコードになるのに、 VBAで rs.Open "Q一覧", cn, adOpenStatic, adLockPessimistic Debug.Print rs.RecordCount で見れ見ると、 フィルタ前の300件が取得されてしまいます。 なぜフィルタが適用されてないのでしょうか? Q一覧は、 クエリ1とクエリ2を結合させて作ったクエリですが 元々がテーブルではなくクエリだからこの現象が起こるのでしょうか?

  • 実行時エラー3021

    For i = 1 To rs.RecordCount 番号 = rs("番号") rs.MoveNext Next こんな感じで、ADOでループしているのですが、 一番最後のレコードで、 実行時エラー3021 「BOFとEOFのいずれかTRUEになっているか、 または現在のレコードが削除されています。 要求された操作には、現在のレコードが必要です。」 が発生します。 rs.Open "SELECT * FROM T全て", cn, adOpenStatic, adLockPessimistic この部分に問題があるのでしょうか? adOpenStatic, adLockPessimistic この部分はコピペで、意味が分からないまま使っています。

  • ADOで現在のレコードの次のレコードの値も取得

    ADOで現在のレコードの次のレコードの値も取得するには? アクセスに対してADOでデータを取得しているのですが 例えばテーブルに フィールド1 あああ いいい ううう と入ってる時に、1レコード目のあああの値を取得しているときに、同時に次のレコードのいいいの値も取得することは可能ですか? Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM テーブル1", cn, adOpenStatic, adLockPessimistic For i = 1 To rs.RecordCount MsgBox rs("フィールド1") '現在のレコード MsgBox rs("フィールド1") + 1 '次のレコード rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。