連投になってしまい申し訳ありません。
フィールド:住所1
テーブル:T_出力
レコードの更新:Replace([T_出力].[住所1],[T_置換用テーブル].[置換前],[T_置換用テーブル].[置換後])
抽出条件:Like "" & [T_置換用テーブル].[置換前] & ""
という校正の更新クエリがT_出力のフィールドの数だけあるのですが、1つのクエリにまとめて記述することは可能でしょうか?
レコードの更新のフィールド名を変え、抽出条件のまたは に同じ抽出条件を記述してみたところ、型変換エラーが出ました。
それぞれのフィールドの同じように設定すればいいのでは。
ただし、抽出条件は1行ずつずらして設定します。(OR条件になる)
あるいは、抽出条件をなしにてしもいいでしょう。
それで試しましたが型変換エラーが起きました。
置換用のテーブル・T_出力のテーブルはいずれのフィールドも短いテキスト型です。
また、総レコード4件、住所1と住所2だけを横並びにしてOr条件で更新をかけてみたところ、
12件の型変換エラーが出ました。
住所1はあるが住所2はない(住所2がNull?)レコードが実行前に12件あったので
Nullを短いテキスト型に更新しようとしてるのでは?と考えています
Nz関数でNullを""に変換したらどうでしょう。
Nz 関数 - Microsoft サポート
型変換エラーは出なくなりました!ありがとうございます。
もう一点質問なのですが、T_置換用テーブルの中に、置換前" "(全角スペース)、置換後" "(半角スペース)があります。
置換後も、スペースを含むレコードが抽出されてしまいます。これは仕方ないことなのでしょうか?
" "(半角スペース)に変換はできていますか。
また、「スペースを含むレコードが抽出されてしまいます」とは、どのような抽出条件を設定した時の話でしょうか。
全角スペースから半角スペースへの置換は問題なく行われています。
抽出条件:Like "" & [T_置換用テーブル].[置換前] & "" です。
合計で7つフィールドを並べ、OR条件で同じ抽出条件を記述しています。
恐らく全角スペースと半角スペースが区別されず、抽出条件に引っかかってしまっています。
置換自体は問題なく行えるようになったので、「置換したのにまだレコードが残っていて気持ち悪い」くらいの問題です。
ACCESSの比較はそういう比較なんですよね
【Access】クエリで大文字/小文字、全角/半角、ひらがな/カタカナを区別して文字列比較したい(hatena chipsさん)
試しに住所1だけにしてみたのですが、
式1: InStr(1,[T_出力].[住所1],"[T_置換用テーブル].[置換前]",0)
抽出条件:>0にしてみたのですが、1件も抽出されませんでした。
どのように書けばよいのでしょうか?
式1: InStr(1,[T_出力].[住所1],"[T_置換用テーブル].[置換前]",0)
"
で囲んだらそれは文字列です。つまり「[T_置換用テーブル].[置換前]」という文字列と比較していることになりますね。""をとってみましたが、見つかりません、パラメータや別名を確認してくださいというエラーが出ました。
正しい抽出条件はどのように記述すればよろしいでしょうか。
[T_置換用テーブル].[置換前]
のテーブル名、フィールド名に間違いはないですか。間違いないなら、現状のクエリのSQLを提示してください。
下記提示致します。
住所1のみのSQLです。
SQLを見る限りは問題なさそうですね。
簡単なサンプルを作成して確認してみましたが、問題なく実行できました。
クエリを新規作成して、SQLビューに提示のSQLをコピーして貼り付けて実行したらどうなりますか。
すみません、現状のSQLとは、Instrに書き換えた方(エラーが出ている方)のことでしょうか?
このエラーが出ているクエリのSQLを提示してください。
エラーの出ないSQLを提示されても意味ないですよね。
一応、下記のSQLを実行してみましたが、エラーなく実行できました。
SQLビューを開こうとしましたが、'InStr(1,[T_出力].[住所1],[T_置換用テーブル].[置換前],0)'が見つかりません、パラメータや別名が正しいこと、、、を確認してくださいというエラーが出ます。
見にくいかもしれませんが、スクショでのデザインビューです。
クエリを新規作成して、SQLビューにして、下記のSQLを貼り付けて実行するとどうなりますか。
デザインビュー見ました。
更新するフィールドと抽出条件を設定するフィールドは別にしないと。
上記の回答で新規作成したクエリをデザインビューにして違いを確認してください。
HatenaさんのSQLビューをコピーしてデザインビューを確認したところ、住所1とInstrの2つに分かれました。1つのフィールドに書こうとしていたから上手くいかなかったのですね。
式1: InStr(1,Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],0)
というような演算フィールドは更新できませんからね。