0

I have a form in MS-Access which shows tabular data. as follows

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

There is no limit in how many people's records can be there in each record content cell. but each record will have only those 3 fields. Name, Age and Sex.

I need to split the record content in a subform such a way that it looks like:

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

What is the easiest way to achieve this? The table from where the record is coming has the data in similar format as shown in the first diagram. How can I split this compound string and display it in multiple rows?

4

1 回答 1

2

您需要规范化您的数据——将源表一分为二。

(如何?您需要编写一些 VBA 代码来:

  • 阅读记录表的每一行
  • 将 [record id] 列的值保存到稍后将在此循环中使用的变量中
  • 对于 [record content] 列的每个值,将值转换为字符串
  • 使用分隔符“;”分割字符串。也就是分号。使用 split() 函数。有关示例,请参见在 excel (vba) 中拆分字符串。你会得到一个字符串列表。列表中的每个字符串将如下所示:“姓名:xyz,年龄:xyz,性别:xyz”
  • 使用正则表达式从此字符串中提取数据。有关Access 中的示例,请参见http://mark.biek.org/blog/2009/01/regular-expressions-in-vba/ 。
  • 这个正则表达式可能会从字符串中获取姓名、年龄和性别作为第一个、第二个和第三个匹配项:

    "^.*name:\s*([^,]+),\s*age:\s*([^,]+),\s*sex:\s*([.*])$"
    
  • 在进行正则表达式匹配后,您抓取匹配的项目,将它们放入名称、年龄和性别变量中,然后使用这些值和您之前保存的记录 ID 插入新的 People 表中。)

表:

人们

ID

RecordID - 引用 Records.ID

人名

年龄

性别

记录

ID

记录日期

之后,您可以在当前主表单中使用子表单来显示与每条记录关联的人员。如果您在两个表之间有父子关系,Access 会使这变得非常容易,就像您在上面所做的那样。

于 2013-02-19T13:13:27.567 回答