文件路径在文本框txtPath中已经附值,如:“C:\ddd\aa\c.xls”,现在希望做的是点“确定”按钮后能把这个表格中的数据导入到数据库表DMXX中。DMXX的表结构是:ID,WID,YDM,YM。ID和WID是联合主键。在导入数据的时候,ID是附一个固定值,如12,WID是从1开始的流水号,YDM字段的数据对应EXCEL表第一列的数据,YM字段的数据对应EXCEL表的第二列的数据。
    小弟是新手,很多专业术语和控件也不太明白,麻烦各位高手帮忙写一个完整的方法,如果要做什么设置也麻烦解释一下,非常感谢!!

解决方案 »

  1.   

    使用SQL Server提供的DTS来做  具体的我没有代码 你可以搜下
    要不就是用一条一条对应的插入到数据库中 这样比较麻烦 没有这样用过
      

  2.   

    '数据库数据输出到Excel的函数给谨供参考'引用Microsoft Excel 11.0 Object LibraryFunction printer_data()
        Dim xlapp As Excel.Application, l_set As Recordset, i As Integer, l_sum As Integer, j As Integer
        Dim strsource As String, strdestination As String, l_row As Integer
        Dim l_sheets As Integer, l_re_counts As Integer
        Set xlapp = New Excel.Application
        Set xlapp = CreateObject("excel.application")
        FileCopy g_cuspath & "\provider_sum.xls", g_cuspath & "\provider_sum.xls_temp.xls"
        Set XLBOOK = xlapp.Workbooks.Open(g_cuspath & "\provider_sum.xls_temp.xls")
          
        If i_pici > 23 Then
           l_sheets = 1
           l_re_counts = i_pici
           f_row = 23
           Adodc1.Recordset.MoveFirst
           Do
             i = 6
             j = 1
             i_yw = 0
             i_bhg = 0
             Set XLSHEET = XLBOOK.Worksheets(l_sheets)
             XLSHEET.Cells(3, 1) = "供应商名称:" & T_p_name.Text
                 Do While j <= f_row
                    XLSHEET.Cells(i, 1) = Trim(Adodc1.Recordset("ll_date"))
                    XLSHEET.Cells(i, 2) = Adodc1.Recordset("stock_code")
                    XLSHEET.Cells(i, 3) = Adodc1.Recordset("xingneng")
                    Select Case Adodc1.Recordset("pinming")
                      Case "m"
                        XLSHEET.Cells(i, 4) = "√"
                      Case "p"
                        XLSHEET.Cells(i, 6) = "√"
                    End Select
                    XLSHEET.Cells(i, 7) = Adodc1.Recordset("guige")
                    XLSHEET.Cells(i, 8) = Adodc1.Recordset("dh_shu")
                    XLSHEET.Cells(i, 9) = Trim(Adodc1.Recordset("deliver_date"))
                    
                    If IsNull(Trim(Adodc1.Recordset("dh_detail"))) Then
                       XLSHEET.Cells(i, 10) = "?"
                    Else
                       If IsNumeric(Adodc1.Recordset("dh_detail")) Then
                          If CInt(Adodc1.Recordset("dh_detail")) < -7 Then
                             XLSHEET.Cells(i, 10) = "×"
                             i_yw = i_yw + 1
                          Else
                             XLSHEET.Cells(i, 10) = "√"
                          End If
                       Else
                          If Trim(Adodc1.Recordset("dh_detail")) = "准时" Then
                             XLSHEET.Cells(i, 10) = "√"
                          Else
                             XLSHEET.Cells(i, 10) = "×"
                             i_yw = i_yw + 1
                          End If
                       End If
                    End If
                    
                    If IsNull(Trim(Adodc1.Recordset("zz_panding"))) Then
                       XLSHEET.Cells(i, 11) = "?"
                    Else
                       If Adodc1.Recordset("zz_panding") = "合格" Then
                          XLSHEET.Cells(i, 11) = "√"
                       Else
                          XLSHEET.Cells(i, 12) = "×"
                          i_bhg = i_bhg + 1
                       End If
                    End If
                    If Adodc1.Recordset("zz_panding") = "特采" Then
                       XLSHEET.Cells(i, 13) = "特采"
                    End If
                    XLSHEET.Cells(i, 14) = G_OPER
                    i = i + 1
                    j = j + 1
                    Adodc1.Recordset.MoveNext
                Loop
                XLSHEET.Cells(29, 2) = CStr(f_row)
                XLSHEET.Cells(29, 8) = CStr(i_yw)
                XLSHEET.Cells(29, 13) = CStr(i_bhg)
                
                l_re_counts = l_re_counts - 23
                l_sheets = l_sheets + 1
                If l_re_counts > 23 Then
                   f_row = 23
                Else
                   f_row = l_re_counts
                End If
           
           Loop Until l_re_counts <= 0
        Else
           f_row = i_pici
           Set XLSHEET = XLBOOK.Worksheets(1)
           XLSHEET.Cells(3, 1) = "供应商名称:" & T_p_name.Text
           i = 6
           j = 1
           i_yw = 0
           i_bhg = 0
                Adodc1.Recordset.MoveFirst
                Do While j <= f_row
                    XLSHEET.Cells(i, 1) = Trim(Adodc1.Recordset("ll_date"))
                    XLSHEET.Cells(i, 2) = Adodc1.Recordset("stock_code")
                    XLSHEET.Cells(i, 3) = Adodc1.Recordset("xingneng")
                    Select Case Adodc1.Recordset("pinming")
                      Case "m"
                        XLSHEET.Cells(i, 4) = "√"
                      Case "p"
                        XLSHEET.Cells(i, 6) = "√"
                    End Select
                    XLSHEET.Cells(i, 7) = Adodc1.Recordset("guige")
                    XLSHEET.Cells(i, 8) = Adodc1.Recordset("dh_shu")
                    XLSHEET.Cells(i, 9) = Trim(Adodc1.Recordset("deliver_date"))
                    
                    If IsNull(Trim(Adodc1.Recordset("dh_detail"))) Then
                       XLSHEET.Cells(i, 10) = "?"
                    Else
                       If IsNumeric(Adodc1.Recordset("dh_detail")) Then
                          If CInt(Adodc1.Recordset("dh_detail")) < -7 Then
                             XLSHEET.Cells(i, 10) = "×"
                             i_yw = i_yw + 1
                          Else
                             XLSHEET.Cells(i, 10) = "√"
                          End If
                       Else
                          If Trim(Adodc1.Recordset("dh_detail")) = "准时" Then
                             XLSHEET.Cells(i, 10) = "√"
                          Else
                             XLSHEET.Cells(i, 10) = "×"
                             i_yw = i_yw + 1
                          End If
                       End If
                    End If
                    
                    If IsNull(Trim(Adodc1.Recordset("zz_panding"))) Then
                       XLSHEET.Cells(i, 11) = "?"
                    Else
                       If Adodc1.Recordset("zz_panding") = "合格" Then
                          XLSHEET.Cells(i, 11) = "√"
                       Else
                          XLSHEET.Cells(i, 12) = "×"
                          i_bhg = i_bhg + 1
                       End If
                    End If
                    If Adodc1.Recordset("zz_panding") = "特采" Then
                       XLSHEET.Cells(i, 13) = "特采"
                    End If
                    XLSHEET.Cells(i, 14) = G_OPER
                    i = i + 1
                    j = j + 1
                    Adodc1.Recordset.MoveNext
                Loop
                XLSHEET.Cells(29, 2) = CStr(f_row)
                XLSHEET.Cells(29, 8) = CStr(i_yw)
                XLSHEET.Cells(29, 13) = CStr(i_bhg)
        End If
        xlapp.Visible = True
        
    End Function
      

  3.   

    http://community.csdn.net/Expert/topic/4793/4793273.xml?temp=.5211756
      

  4.   

    Dim cn As New ADODB.Connection
        Dim rs As New Recordset
        cn.ConnectionString = "连接字符串(此处省略N个字)"
        cn.Open
       strSql = "select * from sysobjects where [name]='[Sheet1$]'"
    '查询SQL库里是否有这个表
        Rst.Open strSql, Cn, adOpenKeyset, adLockPessimistic
    if rst.recordcout<>0 then 
    '有表时 
    cn.execute "DROP TABLE [Sheet1$]"
    '删除他
     endif
    rst.close    cn.Execute "select * into invest1 from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=Yes;database=CommonDialog1.FileName;','select * from [Sheet1$]')"嘎嘎。应用楼上的东西
      

  5.   

    不怕各位笑话,俺实在是看不懂啊,txtPath中的文件路径怎么代入这个函数啊?直接运行这个函数运行到下面一句的时候提示文件未找到,下面两句是什么意思啊?FileCopy g_cuspath & "\provider_sum.xls", g_cuspath & "\provider_sum.xls_temp.xls"
    Set XLBOOK = xlapp.Workbooks.Open(g_cuspath & "\provider_sum.xls_temp.xls")还有Adodc1.Recordset.MoveFirst ,是不是要放个adodc控件啊?
      

  6.   

    好像这个跟我的那个不太一样哦~~,我的水平实在太低,看不太明白也没有办法运行~~,也不知道怎么改...
    小生老师能把含有这个函数的程序源码发给我吗?还有对应一个EXCEl表格是不是?.谢谢了~~
      

  7.   

    晕死他这个是处理的文件 的路径你当然要改成你要处理的文件的位置了需要adodc
      

  8.   

    SORRY 我也是照别人的抄的 我一般都用DTS了 因为可以对应字段什么的 比较简单
    你的是Access 这个方法就不行了
      

  9.   

    Private Sub Command1_Click()
    Dim cn As New ADODB.Connection '连接execl
    Dim con As New ADODB.Connection '连接access
    Dim rs As New Recordset '存储execl中的数据
    con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\My Vbp\MyDataBase\DataBase.mdb;Persist Security Info=False"'连接Access数据库,Data Source换成自己的数据库位置
        cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=false;Data Source=C:\Documents and Settings\zhangshuai\My Documents\My Work\ExeclToSQL.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
    '连接Execl数据库,Data Source换成自己的数据库位置,为了通用可以用通用对话框得到Execl的路径 我这里就不写了    cn.Open
        con.Open
        rs.Open "select * From [Sheet1$]", cn, 1, 1'读取Execl中Sheet1的数据
        If rs.EOF = True Then'判断是否为空
            Exit Sub
        End If
        
        While Not rs.EOF'将RS中存储的Execl数据插入到Access中去.
            con.Execute "Insert Into TableName(Name)Values('" & rs(0) & "')"
               'TabelName是表名 Name时列名要导入那个列就写那个列 Values('" & rs(0) & "')是对应的Execl中的数据,要对应好
            rs.MoveNext
        Wend
    rs.Close
    cn.Close
    con.Close
    Set rs = Nothing
    Set cn = Nothing
    End Sub