从vb6中的excel读取数据并放入数据表中

时间:2016-12-22 05:41:37

标签: excel vb6

有没有办法从excel读取所有数据并将其放入数据表或任何其他容器中,以便我可以根据所需条件过滤数据。如附图所示,我想得到Partnumber的CuValue,其状态为Success,我想要根据计算日期(最新计算日期)获得最新记录。在下面的例子中,我想要CuValue 11292,因为它是状态成功的最新记录。enter image description here lue。

提前致谢

2 个答案:

答案 0 :(得分:1)

您的问题似乎非常广泛,但您提出的问题是正确的,因为存在许多不同的可能性和陷阱。

由于您没有提供任何示例代码,我假设您正在寻找策略,所以就是这样。

  • 简而言之:创建数据库,表和存储过程。复制 您需要在此表中的数据,然后查询表以获取 结果

您可以使用ADO执行此任务。如果您的计算机上没有它,则可以从Microsoft网站下载并安装MDAC可再发行组件。 OLE Automation的优点是您不需要在要执行导入的目标机器上安装Excel,因此您也可以在服务器端执行导入。

安装ADO后,您需要创建两个Connection对象,一个Recordset对象用于从Excel文件中读取数据,一个Command对象用于执行存储过程,该存储过程将执行源的子集的INSERT或UPDATE目的地表中的字段。

以下是您应该展开和调整的指南,如果您发现它对您的任务有用:

Option Explicit

Dim PartNo as String, CuValue as Long, Status as String, CalcDate as Date

' objects you need:
Dim srcConn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim dstConn As New ADODB.Connection


' Example connection with your destination database
dstConn.Open *your connection string*

'Example connection with Excel - HDR is discussed below
srcConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Scripts\Test.xls;" & _
        "Extended Properties=""Excel 8.0; HDR=NO;"";" 

rs.Open "SELECT * FROM [Sheet1$]", _
    srcConn, adOpenForwardOnly, adLockReadOnly, adCmdText

' Import
Do Until rs.EOF
    PartNo = rs.Fields.Item(0);
    CuValue = rs.Fields.Item(1);
    CalcDate = rs.Fields.Item(6);
    Status = rs.Fields.Item(7);
    If Status = "Success" Then
        'NumSuccess = NumSuccess + 1
        ' copy data to your database
        ' using a stored procedure
        cmd.CommandText = "InsertWithDateCheck"
        cmd.CommandType = adCmdStoredProc
        cmd(1) = PartNo
        cmd(2) = CuValue
        cmd(3) = CalcDate
        cmd.ActiveConnection = dstConn 
        cmd.Execute
    Else
      'NumFail = NumFail + 1
    End If
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing
srcConn.Close
Set srcConn = Nothing
dstConn.Close
Set dstConn = Nothing

'

通过使用存储过程检查数据并在新表中执行插入或更新,您将能够以快进模式从Excel读取并以最少的时间损失写入数据副本,将一半的工作委托给数据库引擎。

您会看到,存储过程将收到三个值。在存储过程中,您应该插入或更新此值。表的主键应为PartNo。检查计算日期,如果更新,请更新CuValue。 通过在网上搜索,您将找到足够的样本来编写这样的存储过程。

填充表后,只需使用另一个记录集即可获取显示值所需的数据和工具。

  • Excel中的陷阱:

Excel文件的提供者应同意删除前两行或三行,否则您将有更多工作来创建虚拟记录集,因为Excel的智能数据类型识别可能会失败。 如您所知,Excel单元格不会像几乎所有数据库一样限制为每列相同的数据类型。

如果您维护字段名称,请使用HDR=YES,而不使用前三行,请使用HDR=NO

  • 始终记录读取的“成功”和“失败”记录数 在您的程序中,然后将这些值与原始整体进行比较 Excel中的行数。

随时可以询问更多细节,无论如何,我认为这应该足以让你开始。

答案 1 :(得分:-1)

有很多方法可以做到这一点。 1.您可以创建一个访问数据库表并通过将工作表首先保存到访问表中来导入。然后你可以编写查询。 2.您可以创建一个sql DB和一个表,编写一些代码将表单导入该表。 3.如果您的数据不是很大,您可以在VBA中编写一些代码并完成该任务。 4.您可以使用excel.application和office对象编写c#代码来访问工作表,创建数据表并查询该数据表 取决于您希望使用哪些技能来完成任务。