Доступ к разделению данных столбца с точкой с запятой в структуру таблицы нормализации
У меня есть таблица, которая была извлечена из некоторых данных XML. Я пытаюсь сделать перекрестную ссылку, чтобы я мог составить план организации данных. Эта 1 таблица имеет список переменных. Поля разных типов данных, вычислений, а также диалогов. Один из столбцов имеет параметры. Если тип данных переменной является диалоговым, его параметры имеют список переменных, разделенных точкой с запятой.
Итак, главная таблица имеет такую структуру:
Для записей диалога мне нужно просмотреть столбец их параметров и вставить записи в нормализованную таблицу. Для каждого поля в этом столбце я хочу добавить запись с этим именем диалога и идентификатором строки в этой таблице (я добавил PK в таблицу). Например, в записи диалога, столбец "Параметры", есть поле с именем BusinessName TE. Мне нужно найти в этой основной таблице идентификатор PK строки, имя переменной которой совпадает. Мне нужно поставить идентификатор этой записи вместе с именем диалогового окна и вставить оба в новую таблицу, которую я настроил. Это создаст для меня перекрестную ссылку, чтобы я мог знать, какие переменные используются в каких диалогах.
Я ценю любую помощь, которую может оказать каждый. Я вижу кое-что об использовании функции split, массивов и циклических операций для получения каждого значения, но я нахожу примеры для строк, а не для столбца в таблице.
Спасибо!
Изменить: Добавление в код 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
создает ошибку ""
Если кто-то может помочь, я действительно ценю это!
Другое Править:
Парфе понял мою проблему. Я публикую окончательный код, который я использую, на случай, если он кому-то поможет! PS Я добавил условие, чтобы проверить, если 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