ADOで半角カッコを使用する方法についての質問

このQ&Aのポイント
  • 質問者は半角のカッコを使ってテーブル名を名付けてしまったが、ADOでエラーが発生する。
  • 質問者は全角と半角のカッコを使ったテーブルを作成し、ADOを使用して操作しようとした結果、全角のカッコでは問題なく動作したが、半角のカッコではエラーが発生した。
  • 質問者は多くのテーブル名やクエリ名に半角カッコを使用してしまい、修正するのが手間がかかるため、ADOで半角カッコを使える方法を知りたい。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

カギカッコで括れば質問の問題は解決できるでしょうが、 rs.Open "半角()"・・・→rs.Open "[半角()]"・・・ 下記サイトでの説明のとおり、お勧めできません。 全角カッコも。 Access データベースでの作業時に使用すべきでない特殊文字 http://support.microsoft.com/kb/826763/ja 仮に当面の問題が解決できたとしても、 今後複雑なクエリを作成した場合や、 最悪の場合にはある日突然エラー頻発ともなりかねません。 私なら遠回りでも特殊文字は無くします。 ファイルのコピーを作成し、 メニューのツール→オプション→全般タブの 「名前の自動修正」の中にチェックが入ってなければ入れます。 (三つくらいあるかと思います(2003は持ってません、2002の場合)) テーブル名やフィールド名の修正を行います。 するとクエリでは名前の自動修正が行われます。 フォームやレポートでは、オブジェクト名は修正されたハズ?ですが コントロール内のレコードソースなどの部分に関しては行われないので 個々に修正が必要です。 またモジュールのコードは全く修正は行われないと思います。 修正作業が一通り終わったなら、「名前の自動修正」のオプションは 外して置いた方が無難です。ある意味諸刃の剣 (^^ゞ サブクエリ作成中にAccessが固まりました。 ついでに Access 2002 およびそれ以降のバージョンの Access の予約語の一覧 http://support.microsoft.com/kb/286335/ja にも目を通しておいた方が幸せになれます。

YWZTYZKJ
質問者

お礼

リンク先のサポート、確認しました。 これをみるとカギカッコを付けるのも怖くなってきました。 メニューのツール→オプション→全般タブの 「名前の自動修正」は、 ・名前の自動修正情報をトラックする ・名前の自動修正を行う にチェックがはいってました。 テーブル名やフィールド名の修正をすると、クエリも自動で修正されるのですか。 便利ですね。 予約語の方は見てもよくわからなかったのですが、幸せになりたいのでわかるように努力します。 ありがとうございました。大変参考になりました。

関連するQ&A

  • VBSでADOを使ってaccessのテーブルに接続

    VBSでADOを使ってaccessのテーブルに接続する方法は? Sub ADO_test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & "D:\【Access】サンプル.mdb" rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic MsgBox "test成功です" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub をACCESSVBAで実行すると成功しますが 全く同じコードをメモ帳に貼り付けてtest.vbsで保存し、ダブルクリックすると、 行:3 文字:11 エラー:ステートメントの末尾が不正です。 コード:800A0401 のエラーになります。 VBAは少しわかるのですが、VBSに関しては初心者です。 どこを修正すればコードが通るのか教えてください。

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • 【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の方がコート゛が短くなるからいいのでしょうか? というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。 よろしくお願い致します。

  • SQL Serverへの接続について

    すみませんが、どなたか教えてください。 Access2000のプロジェクトからADOを使って、OLE-DB経由でSQL Serverに接続しようとしています。 SQLステートメントを指定して、レコードセットを作成したいのですが、 以下のSQL分のテーブル名のSYARMに対して、オブジェクト名SYARMは無効ですというメッセージが出てきます。どこが問題になっているのでしょうか? Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset cn.Open "Provider=SQLOLEDB;" & "datasource=(local);" & "Integrated Security=SSPI;" rs.Open "SELECT * FROM SYARM WHERE KANNO=12345;", cn, adOpenKeyset, adLockOptimistic rs.Close cn.Close Set rs = Nothing Set cn = Nothing

  • ADOでアポストロフィー入りの値をフィルタしたい

    例えばレコードの値が「あああ'ああ」だった場合、 ----------------------------------------------------- Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'あああ'ああ'" MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ----------------------------------------------------- とすると 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になってしまいます。 ADOでアポストロフィー入りの値をフィルタする方法を教えてください。

  • 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 はあってもなくても変わらないですか?

  • 「2月」でフィルタをかけたい。

    オフィス2003です。 テーブル1の 日付フィールドには「yyyy/mm/dd hh:nn」形式でいくつかの日付の入力されたレコードがあります。 エクセルのADOを使って テーブル1から「2月」のレコードをフィルタをかけて抽出したいのですがうまく行きません。 Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\db1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("日付 = " & "'" & Month(Date) & "'") rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub を実行すると「種類が一致しません」というエラーになります。 どうすれば2月のデータを取得できるのでしょうか? ご教授よろしくお願いします。

  • closeとメモリの開放について

    Sub test() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic Set rs = Nothing Set cn = Nothing End Sub この場合は rs.close cn.close はなくても問題ないですか? 調べてみると 「メモリの開放」という言葉を目にするのですが これがなんのことだかわかりません。 タスクマネージャーで確認するのでしょうか? よろしくお願いします。

  • VBA ADOのフィルタのアポストロフィーの意味は

    VBAで文字列はダブルコーテーション「”」で括りますが ------------------------------------------------ Sub ADO_Filter() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T社員名簿", cn, adOpenKeyset, adLockOptimistic rs.Filter = "質問タイトル LIKE '*田*'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------ 上記の '*田*' のアポストロフィーはどういう時に必要なのでしょうか? LIKE演算子を使ってるからか Filterだからか など理由があれば教えて下さい。 また、「'」を使っているのに、以後がコメントにならないのも不思議です。 よろしくお願い致します。

  • 【ACCESS2000】 VBAの更新処理に条件を加えたい。

    下記のような更新処理のVBAを組みました。 これにIDが5のものを更新するというのを加えるには どうすればよいでしょうか。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "tbl_D_売上", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect rs("入金方法") = 2 rs("入金方法名称") = "分割" rs.Update rs.Close Set rs = Nothing cn.Close Set cn = Nothing

専門家に質問してみよう