繁体   English   中英

在vb6中从Excel读取数据并放入数据表中

[英]Read data from excel in vb6 and put in a datatable

有没有办法从excel读取所有数据并将其放在数据表或任何其他容器中,以便我可以根据所需条件过滤数据。 如所附图像所示,我想获取状态为“成功”的零件号的CuValue,并且我想要基于“计算日期”(最新计算日期)的最新记录。 在下面的示例中,我想要CuValue 11292,因为它是状态为Success的最新记录。 在此处输入图片说明 e。

提前致谢

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

由于您未提供任何示例代码,因此我假设您正在寻找一种策略,因此就在这里。

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

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

安装ADO后,您将需要创建两个Connection对象,一个Recordset对象从Excel文件中读取数据,而Command对象执行一个存储过程,该过程将对INSERT或Source字段的子集执行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中读取数据并以最小的时间损失写入数据的副本,从而可以数据库引擎完成了一半的工作。

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

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

  • 从Excel中读取的陷阱:

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

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

  • 始终保留程序中读取的“成功”和“失败”记录数的日志,然后将这些值与Excel中的原始总行数进行比较。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM