ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

Accessのクエリは、フィールド名のひらがな、カタカナを区別しないのでしょうか?

こんなことがありました。
VBAのプログラム(クエリ)側ではフィールド名[ひらがな]を指定している箇所で、実際のフィールド名は[ヒラガナ]であり、異なっていることに気づきました。
しかしエラーを出力せずに動作していました。テーブルを見ると、希望通りにデータは格納されていました。

問題個所のクエリと対象のフィールド名は統一する予定ですが、
この動作がMicrosoftの仕様なのか、たまたま動作しているのか、そんなことは無いのか、
ちょっと気になったので質問させて頂きました。

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

http://support.microsoft.com/kb/404985/ja
http://65.54.166.122/kb/883013/ja?spid=1266&sid= …

Accessの仕様なのでしょう。

テーブルのフィールド名をヒラガナとし、
コードから

rs!ひラがナ

でもテーブルのフィールドを呼び出しますし、
ついでに、プロシージャ名を

funcああ

で登録して、

funcアア

でも呼び出せてしまいます。

たとえば、
テーブル1のフィールド名を、名前、ヒラガナ
として、

Sub funcああ()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb

Set rs = db.OpenRecordset("テーブル1")
Do Until rs.EOF
Debug.Print rs!名前
Debug.Print rs!ひラがナ
rs.MoveNext
Loop
End Sub

として、イミディエイトウィンドウで、

funcアア

として実行してもデータを表示します。
    • good
    • 0
この回答へのお礼

テーブル名、まさか関数もひらがなとカタカナを区別しないのは知りませんでした・・・
回答ありがとうございました!

お礼日時:2011/04/12 15:59

(1)一般論としては両者は文字コードが違うので違うはずです。


(2)プログラム言語一般論として、両者を同一として扱う仕組みにすることもありえます。
プログラム関係ではないが、エクセルでもソートなどの場面で出てきたりします。
多分入力の直後の速いうちに、ソースの文字をどちらかに鞘寄せしてしまうのだと思います
(3)アクセスについて、WEB照会すると直ぐ記事が見つかりました
Googleででも「access ひらがな カタカナ 区別」で照会してみたものです。
http://www.relief.jp/itnote/archives/000896.php
こういうことを、まずすませて、ここに質問されることをお奨めします。

SQLの処理系によって、使う場合に、まず確かめておいたほうが良い点だと思います。
SQLServerでも区別しないようです。WEBで沢山記事が出ます。
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。
データの比較につきましては、参考にさせて頂きます。

お礼日時:2011/04/12 16:04

Accessの仕様ではないかと思われます。


試しにAccess2007のテーブル定義で「あ」「ア」の2つのフィールドを作ろうとしましたが、フィールド名が重複しているとして、はねられてしまいました。
    • good
    • 0
この回答へのお礼

フィールドの作成段階で同一であると判断されてしまうのですね・・・これは試していませんでした。
参考になります!
回答ありがとうございました!

お礼日時:2011/04/12 16:09

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qクエリーで、全角混じりデータの抽出[access95]

半角で入力すべきフィールドの中に全角文字が混在している時に、
この全角文字が混在しているデータを、クエリーで抽出する方法を
教えてください。

データ型はテキストで、フィールド長は50です。
また入力されているデータは、任意<50文字とないっています。

Aベストアンサー

StrConv([列名],128)でANSI文字に変換すれば半角文字が1バイトに変換されるので判定が出来るようになります。

クエリでしたら
IIf(LenB([列名])=LenB(StrConv([列名],128)),True,False)
で列にTrue、Falseが返ってくるようになりますので抽出条件を設定すればいいですね。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessで名前の間のスペースを削除したいのですが

Accessで名前の間のスペースを削除したいのですが

Aベストアンサー

細かい状況が分かりませんがAccessではReplace関数というものが使用できます。
例えば 鈴木 太郎 のようなデータがテーブルの氏名フィールドに入っている場合には、更新クエリーで次のように更新すれば間のスペースを除去できます。
Replace([氏名]," ","")

Replace関数は文字列中のある文字を別の文字に置き換える関数ですが、この例では全角スペースを""(空文字列=文字なし)に置き換えています。

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

Qアクセス2003選択クエリーのパラメーター抽出条件式

アクセス2003の選択クエリーで
“株式会社アジア”という会社名をパラメーターに入力して抽出しようとすると、
“株式会社あじあ”という別の会社も出てきてしまいます。
クエリーの「会社名」というフィールドの抽出条件は
[Forms]![会社名ダイアログ]![会社名]
です。
ひらがなとカタカナを区別する方法を教えてください。
よろしくお願いします。

Aベストアンサー

リンク先に
|第2引数を「[抽出条件は?]」というように指定することで、
|パラメータクエリにすることもできます。
と書かれています。
パラメータにフォームのコントロールを指定することもできます。

条件: StrComp([会社名],[Forms]![会社名ダイアログ]![会社名],0)
とすれば良いのです。

Qaccess2003で「GROUP BY」を使用した場合の動作について

Microsoft Access 2003のクエリにてGROUP BY句を使用し集計を行う際に、
ひらがなとカタカナが一緒くたに集計されてしまいます。

区別して集計する事は可能でしょうか。

Aベストアンサー

Fieldという列が対象の場合、StrConv([Field],128)もしくはStrConv([Field],64)の項目を作ってGruop Byに加えてください。

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング