我有一张表,它是从一些XML数据中提取的。我试图做一个交叉引用,所以我可以列出一个组织数据的计划。这1个表有一个变量列表。不同数据类型,计算以及对话框的字段。其中一列有选项。如果变量的数据类型是对话框,则其选项有一个变量列表,用分号分隔。
所以主表的结构如下:
对于对话框记录,我需要查看其选项列并将记录插入到规范化表中。对于每个字段,在该列中,我想添加一个带有该对话框名称的记录,以及该表中行的ID(我向表中添加了一个PK)。例如,在对话框记录Options列中,有一个名为BusinessName TE的字段。我需要在这个主表中搜索具有相同变量名称的行的PK ID。我需要将该记录的ID与对话框的名称放在一起,然后将它们插入到我设置的新表中。这将为我创建一个交叉引用,因此我可以知道哪些对话框正在使用哪些变量。
我感谢任何人都能给予的帮助。我看到有关使用拆分函数,数组和循环来获取每个值的内容,但我找到的示例是字符串,而不是表中的列。
谢谢!
编辑:添加我正在使用的VBA代码。我将它附加到表单上的按钮,这样我就可以点击它来运行它。
Private Sub RunParse_Click()
Dim db As DAO.Database
Dim rs As Recordset
Set db = CurrentDb()
Dim sqlStr, insertSQL, arrayVal As String
Dim TestArray As Variant
Dim Options As String
Dim Dialog As String
Dim FieldName As Long
Dim i As Integer
sqlStr = "SELECT [MASTER Fields].Options,[MASTER Fields].[Variable Name] FROM [MASTER Fields] WHERE ((([MASTER Fields].[Variable Type])='dialog'));"
Set rs = db.OpenRecordset(sqlStr)
rs.MoveLast
rs.MoveFirst
Do While Not rs.EOF
Options = rs.Fields(0)
Dialog = rs.Fields(1)
If InStr(Options, ";") Then
TestArray = Split(Options, ";")
For i = 0 To UBound(TestArray) - LBound(TestArray) + 1
If TestArray(i) <> "" Then
arrayVal = TestArray(i)
FieldName = DLookup("ID", "MASTER Fields", "[Variable Name] = " & "'" & arrayVal & "'")
insertSQL = "INSERT INTO FieldTemplatesUse(FID, TemplateAK) " _
& "VALUES(""" & FieldName & """, """ & Dialog & """)"
DoCmd.RunSQL (insertSQL)
End If
Next i
End If
rs.MoveNext
Loop
End Sub
现在就在说
If TestArray(i) <> "" Then
创建错误&#34;&#34;
如果有人可以提供帮助,我真的很感激!
另一个编辑:
Parfait发现了我的问题。我发布了我正在使用的最终代码,以防它帮助其他人!附:我添加了一个条件来检查dlookup是否成功,并在故障表中捕获故障。这样我就可以检查出来了。
Private Sub RunParse_Click()
Dim db As DAO.Database
Dim rs As Recordset
Set db = CurrentDb()
Dim sqlStr, insertSQL, arrayVal As String
Dim TestArray As Variant
Dim Options As String
Dim Dialog As String
Dim FieldName As Long
Dim i As Integer
sqlStr = "SELECT [Master Fields].Options,[Master Fields].[Variable Name] FROM [Master Fields] WHERE ((([Master Fields].[Variable Type])='dialog'));"
Set rs = db.OpenRecordset(sqlStr)
rs.MoveLast
rs.MoveFirst
Do While Not rs.EOF
Options = rs.Fields(0)
Dialog = rs.Fields(1)
If InStr(Options, ";") Then
TestArray = Split(Options, ";")
For i = 0 To UBound(TestArray) - LBound(TestArray)
If TestArray(i) <> "" Then
arrayVal = TestArray(i)
If Not (IsNull(DLookup("ID", "Master Fields", "[Variable Name] = " & "'" & arrayVal & "'"))) Then
FieldName = DLookup("ID", "Master Fields", "[Variable Name] = " & "'" & arrayVal & "'")
insertSQL = "INSERT INTO FieldTemplatesUse(FID, TemplateAK) " _
& "VALUES(""" & FieldName & """, """ & Dialog & """)"
DoCmd.RunSQL (insertSQL)
'MsgBox "Adding ID = " & FieldName & "for Dialog: " & Dialog & "Now"
Else
insertSQL = "INSERT INTO tblFieldsNotFound(Dialog, FieldNotFound) " _
& "VALUES(""" & Dialog & """, """ & arrayVal & """)"
DoCmd.RunSQL (insertSQL)
End If
End If
Next i
End If
rs.MoveNext
Loop
MsgBox "All Done!"
End Sub