使用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个。





附件列表

     


    免责声明!

    本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



     
    粤ICP备18138465号  © 2018-2025 CODEPRJ.COM