从不同选项卡中的数据表中获取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从不同选项卡中的数据表中获取值相关的知识,希望对你有一定的参考价值。

我有一个表单要求用户上传excel文件。此excel文件具有可包含多个日期的列。一旦用户选择要上传的正确excel文件,表单将为导入的excel文件的每个不同日期创建选项卡(for循环)。 (在每个选项卡中是一个数据表)。

该表包含参考日期和地点(加拿大和所有省份)的列,加拿大和所有省份的值均为“人口”。

在此之后,我有一个保存到SQL数据库的按钮。它有效。但我遇到的问题是保存按钮仅保存上次的最后一个数据表。保存按钮用于保存所有数据表(所有选项卡)

我有想法将第一个数据表存储在临时表中,但我无法弄清楚如何检索早期选项卡中第一个数据表中的值。

是否有(更好的)解决方案试图将最后一个数据表中的最后一个数据表保存到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
答案

弄清楚了。

我的解决方案是创建一个arraylist并将数据表存储到那些arraylist中。保存时,将arraylist.items保存到数据库中

感谢@mary的意见和帮助

以上是关于从不同选项卡中的数据表中获取值的主要内容,如果未能解决你的问题,请参考以下文章

片段和活动之间没有传递值

Android - 一个选项卡中的多个片段

片段不起作用并且有错误

从活动更新视图页面中片段中的列表视图

VBA复制粘贴循环

合并来自谷歌表格列的记录