2016-04-12 2 views
2

Ich versuche, eine Kopie der Datenbank auf ein Excel-Dokument einzurichten, die Vertriebsmitarbeiter aktualisieren können, während sie in dem Feld sind. Ich habe den Code für eine Insert-Anweisung, die für die Listenzeilen ausgeführt werden soll, aber ich bekomme einen Überlauffehler nach nur 20 Zeilen. Hier ist mein Code:Überlauffehler nach dem Einfügen nur ein paar Zeilen aus Excel

Sub ConnectTODB() 

    Dim CustomersConn As ADODB.Connection 
    Dim CustomersCmd As ADODB.Command 
    Dim lo As Excel.ListObject 
    Dim ws As Excel.Worksheet 
    Dim lr As Excel.ListRow 

    Set ws = ThisWorkbook.Worksheets(8) 
    Set lo = ws.ListObjects("TCustomers") 

    Set CustomersConn = New ADODB.Connection 
    Set CustomersCmd = New ADODB.Command 

    CustomersConn.ConnectionString = SQLConStr 
    CustomersConn.Open 
    CustomersCmd.ActiveConnection = CustomersConn 

    For Each lr In lo.ListRows 
    CustomersCmd.CommandText = _ 
    GetInsertText(_ 
    Intersect(lr.Range, lo.ListColumns("Type").Range).Value, _ 
    Intersect(lr.Range, lo.ListColumns("Customer").Range).Value, _ 
    Intersect(lr.Range, lo.ListColumns("Name").Range).Value, _ 
    Intersect(lr.Range, lo.ListColumns("Contact").Range).Value, _ 
    Intersect(lr.Range, lo.ListColumns("Email").Range).Value, _ 
    Intersect(lr.Range, lo.ListColumns("Phone").Range).Value, _ 
    Intersect(lr.Range, lo.ListColumns("Corp").Range).Value) 

    CustomersCmd.Execute 
    Next lr 

    CustomersConn.Close 

    Set CustomersConn = Nothing 

End Sub 

Function GetInsertText(CType As String, Customer As Integer, Name As String, Contact As String, Email As String, Phone As String, Corp As String) As String 
    Dim SQLStr As String 

    SQLStr = _ 
    "INSERT INTO Customer (" & _ 
    "Type, Customer,Name,Contact,Email,Phone,Corp)" & _ 
    "VALUES (" & _ 
    "'" & CType & "'," & _ 
    "'" & Customer & "'," & _ 
    "'" & Name & "'," & _ 
    "'" & Contact & "'," & _ 
    "'" & Email & "'," & _ 
    "'" & Phone & "'," & _ 
    "'" & Corp & "')" 

    GetInsertText = SQLStr 

End Function 

Die Gesamttabellengröße beträgt nur 1600 Zeilen, so dass ich keinen Überlauffehler erwartet habe. Jede Hilfe wäre willkommen!

Antwort

1

Sie erhalten den Überlauffehler, da eine der Variablen nicht in der Lage ist, die ihr übergebene Eingabe zu verarbeiten. Ich nehme stark an, dass der Täter Customer As Integer in

Function GetInsertText(CType As String, Customer As Integer, Name As String, Contact As String, Email As String, Phone As String, Corp As String) As String

ändern Customer As Integer zu Customer As Long

+0

ist nicht Ints automatisch und leise zu Longs im Hintergrund modelt? – StormsEdge

+1

@StormsEdge: [Interessant Lesen] (http://stackoverflow.com/questions/26717148/integer-vs-long-confusion);) –

+0

Korrigieren Sie sind Siddharth! Ich stolperte darüber, als ich einem meiner Mitarbeiter den Code out-loud erklärte und als ich Ihren Kommentar sah, wurde es bestätigt! Vielen Dank! :) –