現在VB勉強中の者です。参考となる別プログラムを応用しならがら作成しています。
指示により登録するMDBのフィールド名とVBフォームのオブジェクト名を同一にする必要があるのですが、
MDBが複数あり、ファイル違いで同一フィールド名が多数存在します。
当然ですが、ステータスバー用などのメッセージとして以下のように同一オブジェクト名とすると
'画面1
Msg.Add "NO", "登録№を入力してください。"
'画面2
Msg.Add "NO", "電話番号を入力してください。"
同一名称2つ目以降は【このキーは既にこのコレクションの要素に割り当てられています。】となります。
基本的なことなのかもしれませんが、【同一フィールド名】などで検索を行っても理解できる記述を見つけることができませんでした。
通常は同一オブジェクト名を使用することになった場合、どのように対処することで対応するのでしょうか?
よろしくお願い致します。
WinXP VB6.0SP5
>指示により登録するMDBのフィールド名とVBフォームのオブジェクト名を同一にする必要があるのですが、
よくわからない指示ですが(^^;、
登録NoにもTELNoにも「NO」って付けちゃう命名ルールはどうなのか?
ってのも謎で、しかも、"NO"ってフィールド名は、
否定を表す予約語と解釈される場合もあるので、
そもそも避けたほうがよろしいかと。
>MDBが複数あり、ファイル違いで同一フィールド名が多数存在します。
ならば、「指示と矛盾しますが?」ということで指示者に確認したほうがいいかもしれないですね。
無理やりやるなら、
[ファイル名][テーブル名][フィールド名]
のような形で修飾するとか、
Msg.Add "[File_A]_[登録テーブル]_[NO]","登録№を入力してください。"
Msg.Add "[File_B]_[電話テーブル]_[NO]", "電話番号を入力してください。"
もげさん、ご回答ありがとうございます。
返事が遅くなり申し訳ありません。
名称を同一とするのは後々分かりやすいためとのことでした
それからハッキリ名称を覚えておらずに[NO]と記載しましたが、正しくは[RegNo]でした(汗)
あとは住所や名称などがMDB違いで同一項目が同一フィールド名となっています。
元はMDB1つに対して1つexeを作成し複数のexeを連動させていたものを今回新たに作成し1つにまとめるそうです。
[無理やりやる]という方法のような形は既に試していたのですが、
まだまだ無知な私のやり方に問題があるらしく、思うように動作させることができませんでした。
全体の入力内容確認としてCase文を利用していますが、当然上から読みに行き、
同一オブジェクト名を実行する為、正しいチェックが行えていません。
通常は1つのプログラムの中で同一のオブジェクト名は使用しないものなのでしょうか?
もう少し同一オブジェクト名で上手く動作させる方法がないか及び、MDBに書き込む際にフィールド名を合わせる
方法ではダメかを確認したいと思います。
>通常は1つのプログラムの中で同一のオブジェクト名は使用しないものなのでしょうか?
びみょーな言い回しですね(^^;
例えば、1つのオブジェクトのメンバとしてある名前が別のオブジェクトにあっても
何の問題も無いわけです。
TextBox1.Text = "てきすと"
TextBox2.Text = "テキスト"
共通の Text があるわけですよね?
ComboBox1.Text = "コンボ"
でもよく分かると思います。
>1つのプログラムの中で同一のオブジェクト名
それって1つのフォームに2つの TextBox1
を用意するイメージ?
ってことは TextBox1 には電話番号を、もう一つの
TextBox1 には登録ナンバーを表示します。
TextBox1 にはデータベースの電話番号フィールド
の値を表示し、その際、頭6桁で市外局番データベース
を検索して得られた住所情報を、更にもう一つの
TextBox1 に表示します。
検索できなかった場合には、エラー表示用の TextBox1 に
『該当なし』と表示します。
この時、登録ナンバーは新規で採番しますので、
TextBox1 は空白表示してください。
…とか言われても混乱せずにプログラムできるって
こと???
どう考えてもおかしいと思うんですが???
どういう結果を望んでいるのか理解できません。
指示に対する貴殿の解釈に誤りがある場合もありますよね。
指示者とコミュニケイションをよくとってください。
極端な話ですが、こんな感じになっているかもしれません。
http://www.projectcartoon.com/cartoon/586
>名称を同一とするのは後々分かりやすいためとのことでした
使い方次第ですが、
異なるものに対して同じ名前を付けるのは混乱の元になる可能性があります。
今回の場合は、文面から推測する限り、
その[RegNo]がどのテーブル、どのMDBのものなのか知らないと、
正しい結果が得られないはずです。
Case文?(Select...Case ステートメント)なら、
Select Case MDB名
Case "File_A"
Select Case テーブル名
Case "電話テーブル"
Select Case フィールド名
Case "RegNo"
'ここで電話番号の処理
(以下略)
だと思いますよ。
特攻隊長まるるうさん、ご回答ありがとうございます。
よく理解できていない者が説明している為、上手くお伝えできず申し訳ありません。
作成しているのは顧客管理システムのようなものなのですが、
フォーム1は顧客情報の登録画面
フォーム2はお店情報の登録画面
のように複数画面が存在し、フォーム1つに対して登録先のMDBが1つ存在します。
フォーム1内に配置したテキストボックスなどには同一オブジェクト名は存在しません。
MDBのフィールド名とフォームのオブジェクト名を同一にする指示により、
フォームは別ですが住所、電話番号などの項目が複数存在する為にフォーム違いで同一オブジェクト名としています。
この状況でステータスバーやチェックを上手く機能させる方法を模索しています。
>フォーム1内に配置したテキストボックスなどには同一オブジェクト名は存在しません。
>MDBのフィールド名とフォームのオブジェクト名を同一にする指示により、
そこでまず矛盾が発生しやすいと思います。VB側ではフォームごとに別管理してる
のであれば、データベースでも別管理でないとおかしいですよね?
もげ さんの指摘どおり、
[フォーム1用テーブル].[RegNo]・・・登録No
[フォーム2用テーブル].[RegNo]・・・電話番号
として管理することを明示してください。
この仕様で決定でいいですよね?
[共通テーブル].[RegNo]・・・登録No
[共通テーブル].[RegNo]・・・電話番号
は、有り得ないのですから。
>この状況でステータスバーやチェックを上手く機能させる方法を模索しています。
エラーチェックは別関数にするなら、値だけ渡しますから、オブジェクトの
名称に依存することが珍しいと思います。というか逆に依存するほうが問題です。
例えば数値チェックなら
'/// Form1
Private Sub Command1_Click()
Call NumCheck(Me.Text1.Text)
End Sub
'/// Form2
Private Sub Command1_Click()
Call NumCheck(Me.Text1.Text)
End Sub
ですから何の問題も起きませんよね?この時点で JUN さんが何を問題と
しているのかが理解できないのです。問題点が分かるような説明をお願いします。
ツイート | ![]() |