- ベストアンサー
Accessでフィールドを追加したい
Accessであるシステムを作成しているのですが、いくつか不明な点があるのでアドバイスをお願いします。 「社員情報」をいうテーブルがあり、初期の状態で「社員番号」「氏名」「入社年月日」「年齢」とフィールドがあります。 このテーブルを基にフォーム「社員情報入力」も作ってあります。 ここで新たに、社員情報テーブルに「生年月日」「連絡先」など、フィールドを追加したいのですが・・・以下のような条件があるので、どうしていいのかわからず困っています。 【条件】 ・フィールド追加用のフォーム(新規フィールド名を入力させる)を作り、そこからフィールドを追加させる。(直接テーブルはいじらせないため) ・追加したフィールドを社員情報入力フォームに反映(表示)させたい ・追加したフィールドをレポートにも反映(表示)させたい このような条件でフィールドの追加は無理なのでしょうか? アドバイスや参考になるページを教えてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
[イミディエイト] ? CnnExecute("ALTER TABLE 社員情報 ADD COLUMN 生年月日 DATE") True ? CnnExecute("ALTER TABLE 社員情報 ADD COLUMN 連絡先 TEXT(32)") True <社員情報> 社員番号__氏名_________入社年月日____年齢___生年月日___連絡先 101__________鈴木 一郎 __2001/04/10___22 102__________中村 主水 __2001/04/10___22 このように、<社員情報>テーブルに列を追加するのは簡単に実行できます。 <TableAdd.txt> ALTER TABLE 社員情報 ADD COLUMN 生年月日 DATE ALTER TABLE 社員情報 ADD COLUMN 連絡先 TEXT(32) 通常は、このような列を追加するSQL文をテキストで配布するでしょう。 後は、それを実行するアプリケーションを配布すれば目的は達成されます。 ユーザに<新規フィールド名を入力させる>なんて冒険は犯さないと思います。 フォームやレポートもコピーして差し替えればいい訳ですが・・・。 ここを自動化すると、仕掛けがチトややこしいと思います。 まあ、そこはオペレータに頼んだらどうですか? <バックエンドとフロントエンドとへの分割が最善> 思うに、この際、データベースをバックエンドとフロントエンドに分割したらどうですかね。 であれば、バックエンドを変更するアプリと新しいフロントエンドは配布した終わりです。 分割こそが、この手の悩みからも解法される最善策だと・・・。
その他の回答 (2)
普通なら、管理者側で「社員情報」テーブルに「生年月日」「連絡先」フィールドを追加するべきものです。 多分、質問者さんは言葉の用法を間違えて質問されているのでしょう。 アクセスで「フィールドの追加」とは、テーブル構造を変更する事を意味します。 つまりテーブル上に今まで存在しなかった項目(列と言ってもいいです)を追加することになります。 質問者さんの言っているのは、レコード(行)を追加することだと思います。 ただ、現在の「社員情報」テーブルには「生年月日」「連絡先」というフィールドが無いので「フィールドの追加」という表現を使ったのでしょう。 これを実現するには、二通りの方法があります。 1.管理者側で「社員情報」テーブルに「生年月日」「連絡先」というフィールドを追加してやる。 2.「社員情報」テーブルとは別に「社員追加情報」等といった別テーブルを新たに作成し、 「社員コード」「生年月日」「連絡先」のフィールドを作成し、「社員情報」テーブルとは 「社員コード」でリンクさせる。 「1.」の方法だと追加情報が無い社員も空データを持つことになる。 「2.」の方法は追加情報が有る社員だけのレコードを持つことになるので 無駄な領域が無くて済む。 しかし、「生年月日」「連絡先」の2つのフィールドだけなら、社員情報」テーブルに追加してしまった方が 良いと思います。 私の勝手な推測なので、違っていたら補足してください。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>・フィールド追加用のフォーム(新規フィールド名を入力させる)を作り、 >そこからフィールドを追加させる。(直接テーブルはいじらせないため) オペレーターにテーブル構造を変えさせるのですか? テーブル構造を変えるというのはそんな簡単なことじゃないですよ 考え直したほうがいいと思いますが 何のためにそのようなことをしようとしているのかの説明があれば 他の方法も含めて何らかの回答が出来るかもわかりませんが