【问题标题】:How to read text file and insert to database如何读取文本文件并插入数据库
【发布时间】:2019-05-07 23:42:23
【问题描述】:

我有很多文本文件,内容如下:

LOG_NAME=LOGX1245; LOT_NO=NA; 步=NA; 否=CS84E869500115; TIME_START=20190506 094715; TIME_END=20190506 094715

我需要读取文本文件并插入数据库。 列名是第一个字段,值是第二个字段。 如何读取文本文件并将每一行插入数据库?

我做的是:

For Each file In fso.GetFolder("C:\Data").Files
    Set otf = objFSO.OpenTextFile(file, 1)
    Do Until otf.AtEndOfStream
        line = otf.ReadLine

        If Mid(line, 1, 12) = "LOG_NAME" Then
            datalog = Trim(Split(line, "=")(1))
        End If

        If Mid(line, 1, 10) = "LOT_NO" Then
            PT = Trim(Split(line, "=")(1))
        End If

        If Mid(line, 1, 4) = "STEP" Then
            TestStep = Trim(Split(line, "=")(1))
        End If

        If Mid(line, 1, 11) = "NO" Then ...
    Loop
    otf.Close
Next

这是我要查询的地方。如何根据从文本文件中获取的值查询 SQL INSERT 语句?有没有更简单的方法?

Dim query
Set rsObj = CreateObject("ADODB.Recordset")

query = "Insert in"

On Error Resume Next
rsObj.Open query, connObj

【问题讨论】:

    标签: sql text vbscript sql-insert


    【解决方案1】:

    试试下面的代码

        Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objConn = CreateObject("ADODB.Connection")
    objConn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Desktop\Data.accdb"
    
    For Each objFile In objFSO.GetFolder("C:\Users\Desktop\Data").Files
        Set objDataFile = objFSO.OpenTextFile(objFile.Path, 1)
        arrData = Split(objDataFile.ReadAll, vbNewLine) 'store file data in array
        objDataFile.Close
    
        varValues = Empty: varFields = Empty
        For i = LBound(arrData) To UBound(arrData)
            arrRowData = Split(arrData(i), "=")
            varFields = varFields & "[" & arrRowData(0) & "]," 'square bracket to avoid reserve keyword as field name
            arrRowData(1) = Left(arrRowData(1), Len(arrRowData(1)) - 1) 'remove last semicolon
            varValues = varValues & "'" & arrRowData(1) & "',"
        Next
        varFields = Left(varFields, Len(varFields) - 1) 'remove last comma
        varValues = Left(varValues, Len(varValues) - 1) 'remove last comma
        objConn.Execute "INSERT INTO Data(" & varFields & ") VALUES(" & varValues & ")"
    Next
    
    Set objFSO = Nothing
    objConn.Close
    Set objConn = Nothing
    

    我使用 Access DB 来测试代码。另外,我假设Data文件夹中的文本文件是相似的,它们只包含适合数据库插入的数据。

    运行代码前的数据库

    运行代码后的数据库

    我在 Data 文件夹中测试了 2 个文本文件。

    【讨论】:

    • 我也想获取列名。 varCol = Empty For i = LBound(arrData) To UBound(arrData) varData = Split(arrData(i), "=")(0) 'get just the data part msgbox varData varCol = varCol & varData & "," msgbox varCol Next varCol = Left(varCol, Len(varCol) - 1) 'remove last semicolon msgbox varCol objConn.Execute "INSERT INTO Data (" & varCol & ") VALUES (" & varValues & ")"
    • 如果每个插入查询成功执行,我可以知道如何 shcek 吗?我试过If Err.Number <> 0 Then,如果满足条件,则查询错误。但即使成功插入了艰难的查询,它也会返回 true。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多