Name doesn't have a jump-in (which acts like a index when using a where clause), so your test to see if a customer exists needs to use FullName not Name! But the main reason for this customer transfer taking hours is because for 90 records you are starting and closing QuickBooks 180 times .... that alone will take hours. Your code should go something like this instead :-
Function Main()
Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3
Const adCmdUnknown = &H0008 Const adCmdText = &H0001 Const adCmdTable = &H0002 Const adCmdStoredProc = &H0004
set mySourceConn = CreateObject("ADODB.Connection") set mySourceRecordset = CreateObject("ADODB.Recordset") mySourceConn.Open = "Provider=SQLOLEDB.1;Data Source=(local); Initial Catalog=BTP;user id = 'sa';password=''" mySourceSQLCmdText = "Select * from CustomerName" mySourceRecordset.Open mySourceSQLCmdText, mySourceConn, adOpenKeyset
If mySourceRecordset.RecordCount < 1 Then Main = DTSTaskExecResult_Failure Else dim myDestSQL, myLookupSQL, myCount
set myQBConn = CreateObject("ADODB.Connection") set myQBRecordset = CreateObject("ADODB.Recordset") myQBConn.Open = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=QuickBooks Data;OLE DB Services=-2;"
for countr = 1 to mySourceRecordset.RecordCount
myLookupSQLCmdText = "SELECT FULLNAME FROM CUSTOMER WHERE FULLNAME = " & "'" & mySourceRecordset.Fields("QBCustomer").value & "'" myQBRecordset.Open myLookupSQLCmdText, myQBConn, adOpenKeyset If myQBRecordset.RecordCount = 0 Then myDestSQL = "INSERT INTO " & """" & "customer" & """" & " (" myDestSQL = myDestSQL & """" & "Name" & """" & ", " myDestSQL = myDestSQL & """" & "billAddressAddr1" & """" & ", " myDestSQL = myDestSQL & """" & "billAddressAddr2" & """" & ", " myDestSQL = myDestSQL & """" & "billAddressCity" & """" & ", " myDestSQL = myDestSQL & """" & "billAddressState" & """" & ", " myDestSQL = myDestSQL & """" & "billAddressPostalCode" & """" myDestSQL = myDestSQL & ") VALUES (" myDestSQL = myDestSQL & "'" & mySourceRecordset.Fields("QBCustomer").value & "'" & ", " myDestSQL = myDestSQL & "'" & mySourceRecordset.Fields("address1").value & "'" & ", " myDestSQL = myDestSQL & "'" & mySourceRecordset.Fields("address2").value & "'" & ", " myDestSQL = myDestSQL & "'" & mySourceRecordset.Fields("city").value & "'" & ", " myDestSQL = myDestSQL & "'" & mySourceRecordset.Fields("state").value & "'" & ", " myDestSQL = myDestSQL & "'" & mySourceRecordset.Fields("zip").value & "'" myDestSQL = myDestSQL & ")" 'msgbox myDestSQL myQBConn.Execute myDestSQL
End If mySourceRecordset.MoveNext
Next
myQBConn.Close
Main = DTSTaskExecResult_Success
End If
End Function |