0

表形式のデータを表示するフォームがMS-Accessにあります。次のように

record id     record date    record content
---------     -----------    --------------
   1           1/2/2011      name: ben, age:38, sex: M; name: emma, age:32, sex: F
   2           5/5/2012      name: john, age:28, sex: M; name: eva, age:24, sex: F

各レコードコンテンツセルに含めることができる人のレコードの数に制限はありません。ただし、各レコードにはこれら3つのフィールドのみが含まれます。名前、年齢、性別。

レコードの内容を次のようにサブフォームに分割する必要があります。

record id     record date    record content
---------     -----------    --------------
   1           1/2/2011      name   age  sex
                             ----   ---  ---
                             ben    38    M
                             emma   32    F

   2           5/5/2012      name   age  sex
                             ----   ---  ---
                             john   28    M
                             Eva    24    F

これを達成する最も簡単な方法は何ですか?レコードの送信元のテーブルには、最初の図に示されているのと同様の形式のデータが含まれています。この複合文字列を分割して複数の行に表示するにはどうすればよいですか?

4

1 に答える 1

2

データを正規化する必要があります。ソース テーブルを 2 つに分割します。

(方法は? VBA コードを次のように記述する必要があります。

  • レコード テーブルの各行を読み取る
  • [record id] 列の値を、後でこのループで使用する変数に保存します
  • [record content] 列の各値について、値を文字列に取得します
  • 区切り文字「;」を使用して文字列を分割します。つまり、セミコロンです。split() 関数を使用します。例については、Excel (vba) で文字列を分割するを参照してください。文字列のリストが返されます。リスト内の各文字列は、「名前: xyz、年齢: xyz、性別: xyz」のようになります。
  • 正規表現を使用して、この文字列からデータを抽出します。Access の例については、http://mark.biek.org/blog/2009/01/regular-expressions-in-vba/を参照してください。
  • この正規表現はおそらく、最初、2 番目、3 番目に一致した項目として、文字列から名前、年齢、性別を取得します。

    "^.*name:\s*([^,]+),\s*age:\s*([^,]+),\s*sex:\s*([.*])$"
    
  • 正規表現の一致を行った後、一致したアイテムを取得し、名前、年齢、性別の変数に入れ、これらの値と以前に保存したレコード ID を使用して、新しい People テーブルに挿入します。)

テーブル:

人々

ID

RecordID - Records.ID を参照

個人名

セックス

記録

ID

記録日

その後、現在のメイン フォーム内でサブフォームを使用して、各レコードに関連付けられた人物を表示できます。上記のように、2 つのテーブル間に親子関係がある場合、アクセスは非常に簡単になります。

于 2013-02-19T13:13:27.567 に答える