Получение значений из таблицы данных в другой вкладке - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть форма, которая требует от пользователя загрузить файл Excel. Этот файл Excel имеет столбец, который может включать несколько дат. Как только пользователь выбирает подходящий файл Excel для загрузки, форма создает вкладки (для цикла) для каждой другой даты, в которую импортированный файл Excel имеет. (в каждой вкладке есть таблица данных).

Таблица состоит из столбцов контрольной даты и месторасположения (Канада и все провинции), а долины для Канады и всех провинций - "население".

После этого у меня есть кнопка для сохранения в базе данных SQL. И это работает. Но проблема, с которой я столкнулся, заключается в том, что кнопка «Сохранить» сохраняет таблицу данных LAST только с последнего раза. Кнопка сохранения предназначена для сохранения всех таблиц данных (все вкладки)

У меня была идея сохранить первые таблицы данных во временной таблице, но я не мог понять, как извлечь значения из первой таблицы данных на предыдущих вкладках.

Есть ли (лучшее) решение, пытающееся сохранить в базе данных SQL не только последнюю таблицу данных на последней вкладке? .. обработчик действия кнопки Сохранить

Private Sub btnSaveDB_Click(sender As Object, e As EventArgs) Handles BtnSaveDB.Click
    If Not sumDts Is Nothing Then
        If Save() Then 'Save is successful
            'Say save is successful
            MsgBox("save done.")

        End If
    Else MsgBox("Nothing To save In DB.", MsgBoxStyle.Information, "Error message.")
    End If
    'MsgBox("Nothing To save In DB.", MsgBoxStyle.Information, "Error message.")

End Sub

не слишком много кода для кнопки на самом деле

Public Function Save() As Boolean
    Dim bSave As Boolean = False
    Dim comSql As New SqlCommand
    comSql.CommandType = CommandType.Text
    Dim myCommand As New SqlCommand
    Dim myTrans As SqlTransaction = Nothing
    Dim MaxCompEstID As Object = Nothing
    Dim compID As Integer
    myTrans = DatabaseConnection.BeginTransaction(IsolationLevel.ReadCommitted)
    myCommand.Connection = DatabaseConnection
    myCommand.Transaction = myTrans
    myCommand.CommandType = CommandType.StoredProcedure

    Try
        comSql.Connection = DatabaseConnection
        comSql.Transaction = myTrans

        myCommand.CommandText = "INSERT INTO dbo.T_LFS_PROV_Component_Total_NPR (CompEstID, ProvCode, population)"

        comSql.CommandText = "SELECT CompEstID FROM T_LFS_PROV_Component_Total_NPR " &
                        " (UPDLOCK) WHERE CompEstID IN " &
                        " (SELECT LastID=MAX(CompEstID) FROM T_LFS_PROV_Component_Total_NPR)"

        MaxCompEstID = comSql.ExecuteScalar()
        If IsNothing(MaxCompEstID) Or IsDBNull(MaxCompEstID) Then
            compID = 1
        Else
            compID = CType(MaxCompEstID, Double) + 1
        End If

        SaveComponent(myCommand, compID)
        myTrans.Commit()
        bSave = True


    Catch ex As Exception

        myTrans.Rollback()
        MsgBox("An exception of type " & ex.GetType().ToString() &
                   " Message : " & ex.Message.ToString() &
                   " : was encountered while attempting to SAVE  ", MsgBoxStyle.Exclamation, "Save LFS NPR")
        Debug.Print("...")
    End Try

    Return bSave
End Function

compID должен быть связан с каждой датой. в этом примере файл excel имеет две разные даты. (поэтому есть две разные вкладки), возможно, связывание compID с каждой датой решит мою проблему

это вторая часть сохранения

 Private Sub SaveComponent(ByRef oCommand As SqlCommand, ByVal compID As Integer)

    oCommand.CommandText = "LFS_Save_NPR_Total"

    For i As Integer = 0 To 12

        oCommand.Parameters.Add(New SqlParameter("@ProvCode", FindProvCodeForSelectedTabIndex(i)))
        oCommand.Parameters.Add(New SqlParameter("@Population", sumDts.Rows(0)(i + 3))) 'change sumdts.rows(0)(i+3)... to NEW DATA TABLE?
        oCommand.Parameters.Add(New SqlParameter("@CompEstID", compID))
        oCommand.ExecuteNonQuery()
        oCommand.Parameters.Clear()

    Next

    oCommand.Parameters.Add(New SqlParameter("@ProvCode", FindProvCodeForSelectedTabIndex(13)))
    oCommand.Parameters.Add(New SqlParameter("@Population", sumDts.Rows(0)(2)))
    oCommand.Parameters.Add(New SqlParameter("@CompEstID", compID))
    oCommand.ExecuteNonQuery()
    oCommand.Parameters.Clear()

End Sub

1 Ответ

0 голосов
/ 12 сентября 2018

Разобрался.

Мое решение состояло в том, чтобы создать массив данных и сохранить таблицы данных в этом массиве.и при сохранении сохраните arraylist.items в базу данных

Спасибо @mary за ваши комментарии и помощь

...