访问转换多值字段table
Access convert multi-valued field table
我已经接管了一个数据库,该数据库具有 table 和多值字段,例如
我正在尝试将其转换为单值字段table,例如
两个 table 中的数字只是一个 ID
,指的是一个名叫 Contact_ID
的人。
我已经尝试在使用交叉表查询的 Access 和使用转置的 Excel 中执行此操作,但是我无法生成一个新的 table,其中包含多个相同 Contact_ID
的示例一列和第二列的唯一关键字。
感谢任何有关执行此操作的最佳方法的建议。
对于未知数量的逗号分隔字符串,使用记录集迭代 table 可能是最简单的方法,使用 Split
函数分隔项目,并填充另一个记录集,例如:
Function ConvertTable()
Dim strOldTable As String: strOldTable = "Table1"
Dim strNewTable As String: strNewTable = strOldTable & "_new"
Dim dbs As DAO.Database
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim lngCID As Long
Dim itm
Set dbs = CurrentDb
DoCmd.CopyObject , strNewTable, acTablem, strOldTable
dbs.Execute "delete from [" & strNewTable & "]"
Set rst1 = dbs.OpenRecordset(strOldTable)
Set rst2 = dbs.OpenRecordset(strNewTable)
If Not rst1.EOF Then
rst1.MoveFirst
Do Until rst1.EOF
lngCID = rst1!Contact_ID
For Each itm In Split(rst1!Field1, ",")
If Trim(itm) <> "*" Then
rst2.AddNew
rst2!Contact_ID = lngCID
rst2!Field1 = Trim(itm)
rst2.Update
End If
Next itm
rst1.MoveNext
Loop
End If
rst1.Close
rst2.Close
Set rst1 = Nothing
Set rst2 = Nothing
Set dbs = Nothing
End Function
多值字段中的值将来自数据库中的 table。
对于 return 您需要将 .Value
添加到您的查询字段的单个项目。
例如,
如果 Table1
包含 ID
作为自动编号和 MyLookUpItems
作为单独的项目。
| MyLookUpID | MyLookUpField |
|------------|---------------|
| 1 | Alcohol |
| 2 | Smoking |
| 3 | diet |
| 4 | Nutrition |
Table2
包含显示多个值的 MyMultiValueField
。
| MyMultiValueField |
|-------------------|
| Smoking, diet |
| Alcohol, diet |
至 return 您将使用的单个项目:
SELECT MyMultiValueField.Value
FROM Table2
这会 return:
| MyMultiValueField.Value |
|-------------------------|
| diet |
| Smoking |
| Alcohol |
| diet |
然后你可以link回原来的ID:
SELECT MyLookUpID, MyLookUpField
FROM Table2 INNER JOIN Table1 ON Table2.MyMultiValueField.Value = Table1.MyLookUpID
return:
| MyLookUpID | MyLookUpField |
|------------|---------------|
| 1 | Alcohol |
| 2 | Smoking |
| 3 | diet |
如果您不确定哪个是多值字段的来源,请在设计视图中打开 table 并查看该字段的 Lookup
选项卡。
Row Source
看起来像:
SELECT [Table1].[MyLookUpID], [Table1].[MyLookUpField] FROM Table1 ORDER BY [MyLookUpField];
显示 Table1
是来源。
编辑:
现在,写完所有这些....只要看看table的设计,行源中的table是 您在问题中寻找的单值字段 table。
我已经接管了一个数据库,该数据库具有 table 和多值字段,例如
我正在尝试将其转换为单值字段table,例如
两个 table 中的数字只是一个 ID
,指的是一个名叫 Contact_ID
的人。
我已经尝试在使用交叉表查询的 Access 和使用转置的 Excel 中执行此操作,但是我无法生成一个新的 table,其中包含多个相同 Contact_ID
的示例一列和第二列的唯一关键字。
感谢任何有关执行此操作的最佳方法的建议。
对于未知数量的逗号分隔字符串,使用记录集迭代 table 可能是最简单的方法,使用 Split
函数分隔项目,并填充另一个记录集,例如:
Function ConvertTable()
Dim strOldTable As String: strOldTable = "Table1"
Dim strNewTable As String: strNewTable = strOldTable & "_new"
Dim dbs As DAO.Database
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim lngCID As Long
Dim itm
Set dbs = CurrentDb
DoCmd.CopyObject , strNewTable, acTablem, strOldTable
dbs.Execute "delete from [" & strNewTable & "]"
Set rst1 = dbs.OpenRecordset(strOldTable)
Set rst2 = dbs.OpenRecordset(strNewTable)
If Not rst1.EOF Then
rst1.MoveFirst
Do Until rst1.EOF
lngCID = rst1!Contact_ID
For Each itm In Split(rst1!Field1, ",")
If Trim(itm) <> "*" Then
rst2.AddNew
rst2!Contact_ID = lngCID
rst2!Field1 = Trim(itm)
rst2.Update
End If
Next itm
rst1.MoveNext
Loop
End If
rst1.Close
rst2.Close
Set rst1 = Nothing
Set rst2 = Nothing
Set dbs = Nothing
End Function
多值字段中的值将来自数据库中的 table。
对于 return 您需要将 .Value
添加到您的查询字段的单个项目。
例如,
如果 Table1
包含 ID
作为自动编号和 MyLookUpItems
作为单独的项目。
| MyLookUpID | MyLookUpField |
|------------|---------------|
| 1 | Alcohol |
| 2 | Smoking |
| 3 | diet |
| 4 | Nutrition |
Table2
包含显示多个值的 MyMultiValueField
。
| MyMultiValueField |
|-------------------|
| Smoking, diet |
| Alcohol, diet |
至 return 您将使用的单个项目:
SELECT MyMultiValueField.Value
FROM Table2
这会 return:
| MyMultiValueField.Value |
|-------------------------|
| diet |
| Smoking |
| Alcohol |
| diet |
然后你可以link回原来的ID:
SELECT MyLookUpID, MyLookUpField
FROM Table2 INNER JOIN Table1 ON Table2.MyMultiValueField.Value = Table1.MyLookUpID
return:
| MyLookUpID | MyLookUpField |
|------------|---------------|
| 1 | Alcohol |
| 2 | Smoking |
| 3 | diet |
如果您不确定哪个是多值字段的来源,请在设计视图中打开 table 并查看该字段的 Lookup
选项卡。
Row Source
看起来像:
SELECT [Table1].[MyLookUpID], [Table1].[MyLookUpField] FROM Table1 ORDER BY [MyLookUpField];
显示 Table1
是来源。
编辑:
现在,写完所有这些....只要看看table的设计,行源中的table是 您在问题中寻找的单值字段 table。