クエリ結果を、フィールドに格納したい。 †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | kimura |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2009-09-28 15:01:28 (月) |
OS | Windows vista |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
いつも大変お世話になっています。 下記の図のように、サービスコード(テキスト型)+通し番号⇒回線IDにしたいと思っています。
続き †
kimura (2009-09-28 15:04:00 (月))
クエリ―にて、下記の図のように、文字列+文字列にし、クエリ―の実行は出来たのですが、この結果をフィールドに反映させ、格納することは可能でしょうか。
また、可能な場合、どこをどうすれば(テーブルで設定するのか、フォームで設定するのか、まったく別の方法なのか)出来るのでしょうか。※ちなみに、以前、こちらの掲示板で似たような質問した時、
プライマリキーを計算で求めるというのは、バグの温床になる恐れがあると教えていただいたのですが、
やはり避けた方がよろしいでしょうか。
重複の質問をしてしまい、大変申し訳ありませんが、会社より、出来るだけ回線IDをプライマリーにしたい(重複した場合エラーが出るように)と希望が出ていますので、再確認させてください。よろしくお願いいたします。
できると思いますが †
M.Kamataki (2009-09-28 18:33:16 (月))
マクロで実現することになると思います。以前の質問でも回答したように、さらに仕様や要件が決まらないと前に進めません。サービスコード欄、通し番号欄の登録方法、登録されたレコードが削除される可能性など、詰められましたか。もう一度、本ページで明確にしてください。
通し番号の入力 †
M.Kamataki (2009-09-28 23:38:55 (月))
ブラウザの表示の関係で画像の右側を見落としていました。通し番号は手入力ですね。ならば、サービスコードと通し番号の2つでプライマリキーにする方法もあります。通し番号入力時に重複した場合にはエラーになります。このことはわざわざ回線IDを設けて、プライマリキーにしなくとも良いということになります。
仕様と要件 †
kimura (2009-09-29 09:49:16 (火))
ご指摘いただいた通り、書き足りない部分、何度も質問してしまっている事もまことに申し訳ありません。
まず、はい、改めて通し番号欄、サービスコード欄の登録方法、登録されたレコードが削除される可能性についてですが。
●サービスコード⇒別テーブル『サービスマスタ(サービスコード・サービス名)』からサービス名をリストボックスで表示させ、選択するとコードが入る。(入力時に、文字数をチェックしたいので、サービスコードはテキスト型です)
●通し番号⇒同サービスが利用されているかは、人の目レベルで確認し、手入力する。(※0で始まる4桁の文字列なので、テキスト型です)
●登録されたレコード⇒削除される可能性はありません。
>わざわざ回線IDを設けて、プライマリキーにしなくとも良い。
はい、「サービスコード」「通し番号」を足したものが「回線ID」になるので、完全にカブってしまうのですが、会社より、あえて「回線ID」を別フィールドで設けたいとのお達しがありました。(数値的な内容としては同じだが、存在として、回線IDとサービスコードは別物だから、別フィールドで作ってほしい…というのが理由です)そして「回線ID」が手入力では打ち間違いが起こるので、二つのフィールドの内容を足したものが、自動で入るような仕様に出来れば、と思っています。
まとめますと、まず「サービスコード」を選び、「通し番号」を入力したら、「回線ID」フィールドに、二つの数字が合わさったものが、
自動で入り、そのデータが「回線ID」フィールドに格納されればいいなという感じです。(ですので、おっしゃっていただいたように、通し番号入力時に重複した場合にはエラーになる仕様に出来ればと思っています。)
フォームで表示 †
M.Kamataki (2009-09-29 12:21:44 (火))
以下のサンプルは「サービスコード」「通し番号」を入力後、「レコード保存」ボタンをクリックすれば、「回線ID」欄にクエリーの結果が表示されます。「サービスコード」「通し番号」の2つのフィールドをプライマリキーに設定しているので、通し番号入力時に重複があれば英語のエラーダイアログが表示されます。このように表示するだけならクエリーで可能です。
faq5_86_1.odb
なお、q1クエリーを対象にフォームウィザードで作成後、フォームの編集で「回線ID」のテキストボックスの属性で「データ」タブの「入力が必要」欄を「いいえ」に変更してあります。q2クエリーで現在のサービスコードごとの通し番号の最大値を確認できます。
もちろんご要望通り、「回線ID」フィールドをテーブルに設けるのは可能ですが、マクロの作成、その後のメンテナンスはご自身で行わなければなりません。そこまでご検討されていますか。
>●登録されたレコード⇒削除される可能性はありません。
とのことなので、クエリーで求められるのなら、フォーム、レポートなどでも常に表示や印刷は可能になります。なので、わたしは特にテーブルに「回線ID」フィールドを設ける必要性を感じません。この点はご意見がある方がいらっしゃれば、お願いします。
補足 †
M.Kamataki (2009-09-29 13:41:00 (火))
先ほどのサンプルですが、「サービスコード」「通し番号」の2つのフィールドをプライマリキーに設定しているので、これ以上のプライマリキー設定はできません。「通し番号」入力時に「重複エラー」を表示させるためには、2つのフィールドをプライマリキーに設定する以外に方法はないと思います。「通し番号入力時に重複エラー」と「回線ID入力時に重複エラー」を同時に実現するというのはプライマリキーの設定ではできないことになります。
したがって「回線ID」フィールドにも「重複エラー」を表示させるためには、ユニーク制限を利用することになりますね。自動での表示(クエリーかマクロかは別にして)を想定していますから、ユニーク制限は必要ないと思いますが、念のため補足しておきます。
クエリーで求めることになりました。 †
kimura (2009-09-30 10:01:56 (水))
ありがとうございます!
社内で話合いをし、教えていただいた通り「サービスコード」「通し番号」の2つのフィールドをプライマリキーに設定し、「回線ID」を表示させる方法で進めることとなりました。
現在のサービスコードごとの通し番号の最大値を確認できるクエリーまで作っていただき、心から感謝しています。
本当にいつも何からなにまでありがとうございます。