質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

7114閲覧

SQL文で全てのカラム(列)を一度に更新する方法

sparc

総合スコア19

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/10/29 01:37

編集2020/10/29 01:59

Microsoft Accessを使用しています。

SQL文でテーブル内の全てを文字列置換(UPDATE)したいのですが、
カラムをひとつひとつ記載しなければ実現できないのでしょうか?

例えば、ふたつのカラム値を更新(全角空白→半角空白置換)する場合、以下のように指定しました。

StrSQL = "UPDATE テーブル名 SET テーブル名.会社名 = Replace([会社名],' ',' '),テーブル名.名前 = Replace([名前],' ',' ')"

ただ、他にも対象カラムが、備考、メモ、詳細、連絡事項などというように、いくつも同じように文字列置換したいのですが、数が多く大変です。

そこで、カラム名をアスタリスクに置き換えてみましたが、構文エラーになります。
全てのカラムを対象とすることはできないのでしょうか。

ご存知のかた、アドバイスいただければ幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/10/29 02:01

普通はこんな処理自体必要ありませんが、何かプログラミング言語を使っているんでしょうから、SQL を自動生成してください。
sparc

2020/10/29 02:05

ありがとうございます。 SQL文ではできないと判断することにします。
m.ts10806

2020/10/29 02:18

Zuishinさん Accessタグが付いてるのでVBAですね。
Zuishin

2020/10/29 02:48

Access は OleDB や ODBC で VBA 以外からも使えますよ。
m.ts10806

2020/10/29 02:59

あぁ。そういうことですね。 一応コードも提示されているのでそこからVBAと推測しました。
sparc

2020/10/29 03:08

私の書き方が悪くて申し訳ありませんでした。 vbaで試みています。for文で回してみます。 貴重なお時間、頂戴いたしましてありがとうございました。
guest

回答5

0

ベストアンサー

住所3、住所4~住所99というカラム

連番であればforでその部分を作るという意味で「1個1個書く手間を省く」くらいならできないことはないです。SQLだけでは無理。あとは内容次第。

投稿2020/10/29 01:56

編集2020/10/29 01:56
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sparc

2020/10/29 01:58

こちらの書き方が悪く申し訳ありません。 住所1~99は例として申し上げただけで、実例にそって記載しなおしましたが、無理そうですね。 update文、一行ではできなそうですね。 ありがとうございました。
m.ts10806

2020/10/29 02:00

>1行で 改行しなければ1行です。 >対象カラムが、備考、メモ、詳細、連絡事項などというように、いくつも同じように文字列置換したい 「同じ処理をさせる」のであれば、配列に入れてループさせることで回答に書いたforと同じように「1つ1つ書く手間を省く」ことはできます。
sparc

2020/10/29 02:07

SQLではそのような仕組みはないとのことなので、プログラムで工夫するしかなさそうですね。 ありがとうございました。
guest

0

普通に考えると出来ないわけない

普通に考えるとできません。

そもそも

住所3、住所4~住所99というカラム

という構造のテーブルが普通ではありません。
正規化について調べてください。

投稿2020/10/29 01:47

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sparc

2020/10/29 01:55

レスポンスありがとうございます。 住所1~99は例として申し上げただけで、実例にそって記載しなおしました。 ただ、出来なそうというのがなんとなく分かりました。
guest

0

自分でやるとしたら、エクセルとテキストエディタ(矩形編集のできるサクラエディタとか)でSQL文を編集します。

手順は以下の様な感じ。

1.編集する項目を縦並びのテキストで準備

1.1.編集するテーブルをエクセルにエクスポート
1.2.ヘッダーをコピーして、行列入れ替えで貼り付け
1.3.コピーしてテキストに張り付け

2.矩形編集を活用してSQL文を作成

3.SQLビューに張り付けて実行

対象のテーブルが多いとかで、作業量が多いようなら、素直にVBAで動的にSQL文生成しますけどね。

投稿2020/10/30 01:41

編集2020/10/30 01:45
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sparc

2020/10/30 08:38

はい、最初はSQL文のオプションでどうにかなると思っていたのですが、出来ないということがわかったので、VBAで動的にSQL文を生成しました。 今回のエクセルとテキストの件は、今後に役立ちそうです。ありがとうございました。
guest

0

私はSQL文を書く時には、Excelに書いています。AccessのSQLビューは見にくいので。
ご提示いただいたSQL文ならば、

ABCD
UPDATE
テーブル名
SET
会社名テーブル名.会社名= Replace([会社名],' ',' '),
名前テーブル名.名前= Replace([名前],' ',' ')

こんな感じで。
A列に項目名
C:D列に式を入れてSQL文にします。

ご質問の内容は、VBAでSQL文を組み立てるようですが、
私ならE列以降に、VBAのステートメントを式で組み立てます。

投稿2020/10/29 03:00

編集2020/10/29 08:29
kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sparc

2020/10/29 03:06

なるほど、目から鱗です。 今回は、for文で回そうと思いますが、これは今後の参考にとてもなります。 ありがとうございました。
guest

0

できないと思います。
見た感じテーブルの設計が誤っている可能性が非常に高いので後戻り可能な時点であれば作り直した方がいいと思われます。

投稿2020/10/29 01:49

q_sane_q

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sparc

2020/10/29 01:56

レスポンスありがとうございます。 住所1~99は例として申し上げただけで、実例にそって記載しなおしました。 ただ、出来なそうというのがなんとなく分かりました。
q_sane_q

2020/10/29 02:07

Accessそのものには明るくないのですが、 なんらかのテキストファイルとしてエクスポート ↓ テキストエディタで一括置換 ↓ 元テーブルを一旦空にして、置換後のテキストファイルからインポート のような操作とか可能なら一括更新(のようなこと)は出来るのかもしれないですね。
sparc

2020/10/29 03:07

なるほど、簡単には出来ないようなので、vbaのfor文で回そうと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問