Доступ к разделению данных столбца с точкой с запятой в структуру таблицы нормализации

У меня есть таблица, которая была извлечена из некоторых данных XML. Я пытаюсь сделать перекрестную ссылку, чтобы я мог составить план организации данных. Эта 1 таблица имеет список переменных. Поля разных типов данных, вычислений, а также диалогов. Один из столбцов имеет параметры. Если тип данных переменной является диалоговым, его параметры имеют список переменных, разделенных точкой с запятой.

Итак, главная таблица имеет такую ​​структуру:

XML Table Image

Для записей диалога мне нужно просмотреть столбец их параметров и вставить записи в нормализованную таблицу. Для каждого поля в этом столбце я хочу добавить запись с этим именем диалога и идентификатором строки в этой таблице (я добавил 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

0 ответов

Другие вопросы по тегам