• ベストアンサー

2つのフィールドの文字列の組み合わせ

Access2013 vba あるテーブルの構成が以下のようになっていますが □テーブル構成 ・ID(Long) ・建物NO(外部キー/Long) ・部屋番号(文字列) この時、建物NOと部屋番号の組み合わせで、一意の値にしたい場合、どのようにしたら良いでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

建物NOを文字列化して、数字以外で、かつ、部屋番号に使わない文字(例えばアンダーバー)を間に挟んで、部屋番号と連結して、文字列を生成する。 例: 建物NO:125、部屋番号:A301⇒125_A301 建物NO:128、部屋番号:202⇒128_202 建物NO:1282、部屋番号:02⇒1282_02 建物NO:211、部屋番号:103⇒211_103 建物NO:21、部屋番号:1103⇒21_1103

superwonderful
質問者

お礼

ありがとうございました。 間に何か記号を入れるのが味噌ですね。

関連するQ&A

  • マスターのあるレコードを削除しても(修正)

    【Access 2013 vba】 テーブルのあるレコードを削除しても、そのIDを使用している別テーブルには影響を与えたくない場合、つまり、別テーブルのIDの値は消したくない場合には、どのようなリレーションシップにしたらよいでしょうか。 因みに、このテーブルの編集画面フォームAでは、3つのクエリーを作成しその最後のクエリーQ3をレコードセットとして参照しています。 以下参照 【Table1】  ・受注ID(主キー)  ・日時  ・部屋ID(Ex.Key) 【Table2】  ・部屋ID(主キー)  ・建物ID(Ex.Key)  ・部屋の情報 【Table3】  ・建物ID(主キー)  ・建物の情報  ・所有者ID(Ex.Key) 【Table4】  ・所有者ID(主キー)  ・所有者の名前 <<Q1>>→Table1+Table2  <Table1>   ・受注ID   ・部屋ID2(外部キー)→Table2部屋の部屋ID ⇐ ※ ここが、問題のリレーションシップです。  <Table2>   ・部屋ID...主キー <<Q2>>→Q1+Table3  <Q1>   ・Q1のTable2の建物ID(外部キー)→Table3の建物ID  <Table3>   ・建物ID <<Q3>>→Q2+Table4  <Q2>   ・Q2のTable3の所有者ID(外部キー)→Table4の所有者ID  <Table4>   ・所有者ID このようにクエリーを作成し、Q3をフォームのレコードソースとしたフォームAを使用しています。 このフォームで、<<Q1>>の※印の行のTable2から取得するIDをTable1の項目「部屋ID2」に保存していますがTable2の方にあるレコードを削除しそのIDがなくなっても、Table1には影響しないようにしたいのです。 よろしくお願いします。

  • MySQL区切った文字列で外部結合はできない?

    MySQLの外部結合について教えてください 「結合の対象となっているカラムの値が一致」は必須なのでしょうか? ■やりたいこと ・Aテーブルaカラム内にある「デリミタの先頭文字列」を抽出して、Bテーブルのidカラムと結合したい ■最終的にやりたいこと ・上記一致条件で、両テーブルデータをSELECTしたい ■試したこと ・「SELECT SUBSTRING_INDEX」で「デリミタの先頭文字列」を抽出できたのですが、そこで行き詰まりました ■質問 ・そもそもやろうとしていることが無謀なのでしょうか? ・テーブル構成を見直した方が良いのでしょうか?

    • ベストアンサー
    • MySQL
  • 特定のフィールドを複数 Join するテーブル

    SQLについて悩んでいます。 例えば personというテーブルに 個人情報があるとします。 別の service というテーブルでサービスを供給する人と 受ける人、両方を含んだテーブルを作ることは、正しい でしょうか? 例えば service テーブルで以下のような構成です。 id - int p_person - 外部キー(personテーブルのidを参照) d_person - 外部キー(personテーブルのidを参照) 僕はよくこうゆうテーブルを作りたくなりますが、 こういう考え方は正規化には反してないものの なんだかおかしいように思ってしまいます。 アドバイスなどいただけたら幸いです。

  • エクセルVBA、列のコピーについて

    VBAについて助けてほしいことがございます! VBA初心者なので、ひょっとしたらレベルの低い質問かもしれず申し訳ないのですが、VBAに詳しい方がいらっしゃれば教えて欲しいことがあります。 下記の前提を含めた作業内容をVBAのコードとしてまとめる事は出来るのでしょうか? 1列目(A1,B1,C1,D1…)にキー項目(名前、番号、地域、住所、ID…)、2列目以降にキー項目のデータが入力されています。 【作業内容】 「ID」の項目の列には、「番号」の列の文字をコピーして貼りつける(キー項目は上書きせずにIDのまま)。 【前提】 ・キー項目の列は固定されていない(B列が番号の時もあれば、住所の時もある)ので、文字を基準にコピー作業をする ・「キー項目が空欄にぶつかったら、検索を終了」という事をループに入れる(キー項目数は変動するため) ・2列目以降の全てのデータをに張り付ける」という事をコードに入れる(2列目以降のデータの列数も変動する且つ途中に空欄も含むため)

  • データベース:主キーが文字列の場合IDを振るべき?

    テーブルの主キーが文字列の場合、 その主キーの文字列を通し番号に置き換えて、 その文字列は別テーブルに移したほうが検索が速いですか? 例えば、テーブルが CREATE TABLE spec ( test_name VARCHAR(40) NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_name) ); で、40文字という長いテスト項目名の場合、 CREATE TABLE spec ( test_id INTEGER NOT NULL, upper_limit NUMERIC(17,7), lower_limit NUMERIC(17,7), PRIMARY KEY(test_id) ); と CREATE TABLE test ( test_id INTEGER NOT NULL, test_name VARCHAR(40) NOT NULL, PRIMARY KEY(test_id) ); という二つのテーブルに分けたほうが検索は速くなりますか? (もちろん、結合する時間も含めてです。) もし速くなるとしても、文字数が3文字など少ない場合は 通し番号に置き換えてもきっと効果は薄いですよね? 何文字以上の文字列なら通し番号に置き換えたほうが速いですか? 皆さんはどのように決めていますか?

  • 【VBA】組み合わせの計算

    VBAにてランダム(適当)な値10個の中で1.5に近い組み合わせを探し、それ以外の値を隣の列に移動させたいのですが、方法がわかりません。 どなたか教えてください

  • ある文字を含む列と同じ行にある列と一致の文字の除外

    "名称"(D列)で*ABCD*と含まれるものと同じ行にある"番号"(B列)が一致するものを全て除外したい(D列の値は異なるが、 B列の値が一緒なものを除外したい)。 下記のコードに上記の内容のコードを加えたいのですがやり方を教えていただけないでしょうか? ちなみにVBA初心者なためお手柔らかにお願い致します。 Sub 分別() Dim j As Long j = Cells(Rows.Count, 1).End(xlUp).Row With Range(Cells(3, 1), Cells(j, 43)) .AutoFilter Field:=37, Criteria1:="EFGK" .AutoFilter Field:=4, Criteria1:="*FF0001*", Operator:=xlOr, Criteria2:="*DD0002*" End With End Sub

  • Select Distinct の使い方

    【Access 2013 VBA / SQL】 [親Table] *ID1 *日付 *受注元会社名 {子Table ] *ID2(主キー) *ID1(親テーブルのID) *ID3(外部キー) [Table B] *ID3 *会社名 ------------------------------ ID2  ID1    会社ID ------------------------------ 1    1     A 2    1     B 3    1     B 4    1     C 5    2     B 6    2     A 7    2     A ------------------------------ ID1=1のもので、会社IDを一意にして選択した会社名を表示したい この時、SQLでどのように書けばよいでしょうか

  • Accessでフィールド名を変数(文字列)で・・・

    以下のようなテーブルがあります ID  回答1  回答2 1   A    D 2   C    A 3   B    B VBAで回答1と回答2のデータを得ようとした場合 Me!回答1 とするのですがこれを変数(文字列で)行う場合どうしたらよいでしょうか? イメージとしては以下のようにしたいのですが・・ Dim str as String str = "回答1" Me!str

  • 再投稿:フィールドの値をテーブル名&フィールド名にして参照したい

    すみません。若干記入ミスだったので再投稿します。 こちらにご解答お願いします。 TABLE_a ・Ta_id ・key_table ・key_field ・key_no TABLE_b ・Tb_id ・Tb_name TABLE_c ・Tc_id ・Tc_name と3つのテーブルがあり、 key_tableに「TABLE_b」、key_fieldに「Tb_id」が入ってて、 TABLE_aとTABLE_bを select の left join して抽出したい場合、 どういうSQL文になるのでしょうか。 select * from TABLE_a left join case key_table when 'TABLE_b' then 'TABLE_b' when 'TABLE_c' then 'TABLE_c' end on 'TABLE_a.key_field'.key_no = case key_table when 'TABLE_b' then ''TABLE_a.key_table'.Tb_id' when 'TABLE_c' then ''TABLE_a.key_table'.Tc_id' end ; とやってみたのですが、うまくできませんでした。 ご教示お願いします。