none
AccessにおけるSQLで予約文字をAS句に使う方法 RRS feed

  • 質問

  • 環境:VisualBasic2010
    OS:Windows7 Pro x64

    AccessのSQLの記述について教えてください。

    SELECT Table1.Ch1 AS No1 , Table1.Ch2,Table1.Ch3, Table1.Ch4, Table1.Ch5 FROM Table1

    上のような記述で、エイリアスを設定してSQLを実行すると問題なくレコードを取得することができます。
    ここで、以下のように予約文字を使用したい場合はどのようにすればよいでしょうか。

    SELECT Table1.Ch1 AS No.1 , Table1.Ch2,Table1.Ch3, Table1.Ch4, Table1.Ch5 FROM Table1

    とりあえず、No.1を[No.1]や 'No.1'、 "No.1"などとしてみましたがNGでした。
    確認方法としては、Access2010上でのクエリでSQL文字列を作成して実行しています。

    コード上では、「.(半角ピリオド)」 を「¥.(全角ピリオド)」として、エイリアスを指定して、バインド後の表示時に、
    Replaceしていますが、スマートではないのと、他の文字に対応できないため、なにか良い方法がないかと模索中です。

    どなたが、ご存知の方がいらっしゃいましたら、教えていただけますでしょうか。
    よろしくお願いいたします。

    2013年1月28日 3:33

回答

  • 以下、ご参考までに連携します。

    エラーで表示されているように、Accessの列別名に、「ピリオド」を使用することはできません。

    列名を以下のようにするなど、ご検討いただければと思います。

    たとえば。。

    • No1←1つめのSQLの記載方法を採用する。
    • №1←「ナンバー」と打ち込んで変換しています。(環境依存文字ですが。。)

     

    参考サイト:

    Access データベースでの作業時に使用すべきでない特殊文字

    How can I use the table name in a column alias in Access SQL?

    • 編集済み kyk_nk 2013年1月28日 5:09 修正
    • 回答の候補に設定 佐伯玲 2013年1月28日 6:28
    • 回答としてマーク Kino001 2013年1月28日 9:15
    2013年1月28日 5:08
  • コード上では、「.(半角ピリオド)」 を「¥.(全角ピリオド)」として、エイリアスを指定して、バインド後の表示時に、
    Replaceしていますが、スマートではないのと、他の文字に対応できないため、なにか良い方法がないかと模索中です。

    エイリアスにピリオドを含むのは難しいように思います。エイリアスで列名を変えてしまう方法は確かにわかりやすく簡単ですが、列名を変えるチャンスは、データテーブルでもあります。テーブルアダプターを使用している場合にはそこで変えてしまえば良いですし、データテーブルを直接使用している場合でもデータ取得後に列名を変更することが可能です。
    また、DataGridViewに表示している場合は、列のHeaderTextプロパティで変更できるなど、コントロール側で変えることもできます。
    確かにReplaceするのは見通しが悪くなり、あまり良い方法だと思いませんので、上記のような対応を検討されてみてはいかがでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク Kino001 2013年1月28日 9:29
    2013年1月28日 7:39
    モデレータ

すべての返信

  • 以下、ご参考までに連携します。

    エラーで表示されているように、Accessの列別名に、「ピリオド」を使用することはできません。

    列名を以下のようにするなど、ご検討いただければと思います。

    たとえば。。

    • No1←1つめのSQLの記載方法を採用する。
    • №1←「ナンバー」と打ち込んで変換しています。(環境依存文字ですが。。)

     

    参考サイト:

    Access データベースでの作業時に使用すべきでない特殊文字

    How can I use the table name in a column alias in Access SQL?

    • 編集済み kyk_nk 2013年1月28日 5:09 修正
    • 回答の候補に設定 佐伯玲 2013年1月28日 6:28
    • 回答としてマーク Kino001 2013年1月28日 9:15
    2013年1月28日 5:08
  • コード上では、「.(半角ピリオド)」 を「¥.(全角ピリオド)」として、エイリアスを指定して、バインド後の表示時に、
    Replaceしていますが、スマートではないのと、他の文字に対応できないため、なにか良い方法がないかと模索中です。

    エイリアスにピリオドを含むのは難しいように思います。エイリアスで列名を変えてしまう方法は確かにわかりやすく簡単ですが、列名を変えるチャンスは、データテーブルでもあります。テーブルアダプターを使用している場合にはそこで変えてしまえば良いですし、データテーブルを直接使用している場合でもデータ取得後に列名を変更することが可能です。
    また、DataGridViewに表示している場合は、列のHeaderTextプロパティで変更できるなど、コントロール側で変えることもできます。
    確かにReplaceするのは見通しが悪くなり、あまり良い方法だと思いませんので、上記のような対応を検討されてみてはいかがでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク Kino001 2013年1月28日 9:29
    2013年1月28日 7:39
    モデレータ
  • kyk_nk様

    返信ありがとうございます。
    やはり、ピリオドはNGなのですね。

    他の方法で対応することにします。

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

    2013年1月28日 9:15
  • trapemiya様

    ご返信ありがとうございます。

    kyk_nk様からも使用できない回答をいただきました。

    初期のころに手がけたもので、「AccessDataSource」を使用しています(Webフォーム開発です)。
    DataSourceModeをDataSetとしているので、そちらで何かできるか調べてみます。

    Me.AccessDataSource1.DataFile = AccDataFile
    Me.AccessDataSource1.SelectCommand = strSQL
    Me.GrdTimeSeries.DataSourceID = Me.AccessDataSource1.ID
    Me.AccessDataSource1.DataBind()

    従いまして、現在は、GridViewのRowDataBindイベントで、RowTypeがHeaderのときの処理で

    .Replace("\.", ".")

    としています。もともとのエイリアス名は使うときによって、様々違うため(表が何種類もある)、
    エイリアス名の設定値を読み込んで後処理としています。

    2013年1月28日 9:29