2016-04-12 27 views
2

Veritabanının bir kopyasını, satış temsilcileri alandayken güncellenebilecekleri bir excel belgesine kurmaya çalışıyorum. Liste satırları için çalıştırılacak bir insert ifadesinin kodunu aldım, ancak yalnızca 20 satırdan sonra bir Taşma hatası alıyorum. İşte benim kodudur:Excel'den yalnızca birkaç satır ekledikten sonra taşma hatası

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 

toplam tablo boyutu yalnızca 1600 satırları, bu yüzden bir taşma hatası beklemiyordum. Herhangi bir yardım mutluluk duyacaktır!

cevap

1

Değişkenlerden biri kendisine verilen girişi işleyemediğinden taşma hatasıyla karşılaşıyorsunuz. Şiddetle suçlu Customer As IntegerCustomer As Integer

+0

Customer As Long değiştirin

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

içindedir Ints otomatik ve sessizce arkaplanda Longs Uçak transmogrified olmadığını sanıyorum? – StormsEdge

+1

@StormsEdge: [İlginç Okuma] (http://stackoverflow.com/questions/26717148/integer-vs-long-confusion);) –

+0

Doğru Siddharth! Kodları iş arkadaşlarımdan birine açıklarken ve yorumunuzu gördüğümde, bu doğrulandı! Teşekkür ederiz! :) –