質問 |
||
| QNo.3974995 | クエリで「データ型が一致しません」と表示される | |
|---|---|---|
| 質問者:tuyo1980 |
クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。 クエリ1のSQL文 SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル FROM PC管理台帳; クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。 クエリ2のSQL文 SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス FROM 職員アカウント; クエリ2では[氏名]の苗字と名前のスペースを置換しました。 クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。 ちなみにクエリ3のSQL文は SELECT [クエリ2].[式1], [クエリ2].[職員番号] FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1]; これでクエリ3をひらくと 「データ型が一致しません」 と表示されます。 どなたかアドバイスお願いします |
|
困り度:
|
||
| 質問投稿日時: 08/04/25 14:55 |
||
回答良回答20pt |
|
| ANo.1 | 「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算 フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが あります。 クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを 指定すると、エラーになります。 従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。 (なお、Trim関数は、第1引数がNullであってもエラーになりません) 上記推測が当たっていれば、 a)上記フィールドが空欄になっているレコードをなくす (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします) b)式1の関数を下記のように変更する のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。 式1の変更で対応する場合は、それぞれ以下のようにしてみてください: (「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と 「[職員アカウント].[氏名]」の誤記と判断して記述しています) クエリ1: Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳; クエリ2: Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント; Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数 です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに なるのを回避しています。 Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、 スペースは全て削除されるため、Trim関数は不要になります。 (その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは ヘルプを確認して下さい) |
|---|---|
| 回答者:DexMachina | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/04/26 11:34 |
|
| |
| この回答へのお礼 | 丁寧な説明ありがとうございました。 よろしければ下記の質問もお願いします。 http://oshiete1.goo.ne.jp/qa3987087.html?ans_count_asc=20 |