zoukankan      html  css  js  c++  java
  • 使用VBA把EXCEL数据导入数据库

    Dim table_Name$
    Sub JugeData()
    Dim i%, Cnum%, dt$, arry1 () As String, arry2 () As String, arry3 () As String, cnn As Object, rst As Object

    cdt = Format(Date, "MMDD")

    table_Name = InputBox("请输入数据库表名", "数据库表名", "ygl_temp" & cdt)

    Cnum = ActiveSheet.Range("a1"). CurrentRegion.Columns.Count
    On Error GoTo errmsg


    '定义字段为文本类型
    For i = 1 To Cnum
      ReDim Preserve arry2(i - 1)
      dt = ActiveSheet.Cells(1, i).Value
      dt2 = FindDataType(dt )
      arry2(i - 1) = dt2 & " varchar2(800)"
    Next

    '生成建表语句
    str1 = Join(arry2, " , " )
    str2 = "create table " & table_Name & " (" & str1 & " )"
    'MsgBox str2


    Set cnn = CreateObject ("ADODB.Connection" )
    Set rst = CreateObject ("ADODB.Recordset" )
    cnn.Open "Provider=OraOLEDB.Oracle.1;Data Source=cd;User Id=user;Password=password;"

    sql = str2
    cnn.Execute (sql)
    MsgBox "create table OK"


    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing

    Call 插入数据


        Exit Sub
    errmsg:
        MsgBox Err.Description, , "错误报告"
    End Sub



    Function FindDataType(V_cell As String)

    '替换标题里的特殊字符
    If V_cell = "" Then V_cell = "空的"

    If IsNumeric(Left (V_cell, 1 )) = True Then V_cell = "a" & V_cell

    If Len(V_cell) >= 15 Then V_cell = Left (V_cell, 14 )

    If InStr(V_cell , "/") Then V_cell = Replace (V_cell, "/" , "_")

    If InStr(V_cell , "'") Then V_cell = Replace (V_cell, "'" , "")



    FindDataType = V_cell

    End Function

    Sub 插入数据()
        Dim tt, arr1(), i% , j%, str$ , arr2(), str2$
        tt = Timer
        Dim cnn As Object, sql$ , rst As Object
        arr1 = ActiveSheet.Range("a1"). CurrentRegion.Value
        Set cnn = CreateObject("ADODB.Connection")
        Set rst = CreateObject("ADODB.Recordset")
        On Error GoTo errmsg
        cnn.Open "Provider=OraOLEDB.Oracle.1;Data Source=cd;User Id=stat_yg;Password=yg12345;"
       
        '构造插入语句
        sql = "insert into " & table_Name & " values ("
        '从第2行开始插入数据
        For i = 2 To UBound(arr1, 1)
            For j = 1 To UBound (arr1, 2 )
                ReDim Preserve arr2(j - 1)
                '在单元格内容插入单引号
                arr2 (j - 1) = "'" & arr1(i, j ) & "'"

            Next
            str = Join( arr2, ",")
            '执行插入语句
            str2 = sql & str & ")"
            cnn.Execute (str2)
        Next

        MsgBox "ok,用了" & Timer - tt & "秒"

        cnn.Close
        Set cnn = Nothing
        Exit Sub
    errmsg:
        MsgBox Err.Description, , "错误报告"
    End Sub


    2014.10.21 增加重复字段名处理,字段名含(,(,-的处理,修改插入数据行变量I为LONG类型,解决超过3W行整形数据溢出问题



    2014.11.26 增加对字段名包含换行符的处理,对字段名第一个字符为特殊字符的处理,替换2个下划线为1个。





    附件列表

    • 相关阅读:
      B/S与C/S的联系与区别
      ASP.NET中常用的26个优化性能方法(二)
      ASP.NET下如何防范SQL注入式攻击
      ASP.NET中常用的26个优化性能方法(一)
      Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)
      C#中海量数据的批量插入和更新 [转]
      [译文]从底层角度看ASP.NETA lowlevel Look at the ASP.NET Architecture( 转)
      C#制作Windows service服务系列
      通过C++ Interop把Windows窗体集成到MFC应用程序中
      【转】.NET内存管理、垃圾回收
    • 原文地址:https://www.cnblogs.com/highroom/p/e2a5905bd9c9e99dcc46968333f3dafe.html
    Copyright © 2011-2022 走看看