Access
 sql >> Database >  >> RDS >> Access

Inserti Salesforce in blocco da Microsoft Access

La versione 2+ del driver Salesforce ODBC consente di eseguire in batch più istruzioni SOQL Insert. Questo blog mostra come inserire più record di Microsoft Access in Salesforce.

Per iniziare:

  • Installare e concedere in licenza il driver ODBC Salesforce.com sulla macchina in cui è installato Microsoft Access.

Prima di poter utilizzare Salesforce.com ODBC Driver per connettere l'applicazione a Salesforce.com, è necessario configurare un'origine dati ODBC. Un'origine dati ODBC memorizza i dettagli di connessione per il database di destinazione (ad es. Salesforce.com) e il driver ODBC necessario per connettersi ad esso (ad es. il driver ODBC di Salesforce.com).

Per eseguire l'amministratore ODBC (che usi per creare un'origine dati), nella finestra di dialogo Esegui di Windows, digita questo comando se stai utilizzando una versione a 64 bit di Microsoft Office:

%windir%\system32\odbcad32.exe

–Oppure–

Digita questo comando se stai utilizzando una versione a 32 bit di Microsoft Office:

%windir%\syswow64\odbcad32.exe

Se non sei sicuro che la tua versione di Microsoft Office sia a 32 o 64 bit, avvia un'applicazione Office, ad es. Microsoft Access e quindi cercare il processo dell'applicazione in Task Manager. Se il nome del processo è (per Microsoft Access) MSACCESS.EXE *32, Microsoft Office è a 32 bit. Se il nome del processo è MSACCESS.EXE, Microsoft Office è a 64 bit.

Per creare un'origine dati del driver ODBC Salesforce.com:

  1. In Amministratore ODBC, scegli la scheda DSN di sistema, quindi scegli Aggiungi.
  2. Nella finestra di dialogo Crea nuova origine dati, scegli Easysoft Salesforce ODBC SOQL Driver, quindi scegli Fine.
  3. Completare la finestra di dialogo Configurazione DSN del driver ODBC di Easysoft Salesforce SOQL:
    Impostazioni Valore
    DSN SFSOQL
    Nome utente Il nome del tuo utente Salesforce.com. Ad esempio, [email protected].
    Password La password per l'utente Salesforce.com.
    Segnale Il token di sicurezza per l'utente Salesforce.com, se richiesto.

    Per scoprire se è necessario fornire un token di sicurezza, scegli il pulsante Test. Se il tentativo di connessione fallisce con un errore che contiene LOGIN_MUST_USE_SECURITY_TOKEN , devi fornirne uno.

    Salesforce.com invia tramite e-mail il token di sicurezza all'indirizzo e-mail associato al tuo account utente Salesforce.com. Se non hai ricevuto un token di sicurezza, puoi rigenerarlo. Salesforce.com ti invierà quindi un'e-mail con il nuovo token di sicurezza. Per rigenerare il token di sicurezza, accedi a Salesforce.com e quindi scegli Configurazione dal menu utente. Cerca "token di sicurezza" nella casella Ricerca veloce. Fare clic su Reimposta token di sicurezza nella pagina Reimposta token di sicurezza. Quando ricevi il token nel tuo client di posta, copialo e incollalo nel campo Token.

  4. Utilizza il pulsante Test per verificare di poterti connettere correttamente a Salesforce.com.

Accesso Microsoft

  1. Crea un nuovo database Microsoft Access.
  2. Crea una tabella chiamata Account con queste colonne:
    Colonna Tipo di dati
    ID Numero automatico
    NomeAcc Testo breve
    Descrizione della proprietà Testo breve
    Indirizzo Testo breve
    Città Testo breve
    Codice postale Testo breve
  3. Inserisci alcuni dati di esempio nella tabella. Ad esempio:
    AccName	Property Description	Address		Town	PostCode
    MyCo	Head Office		1 MyStreet	MyTown	AB1 DEF
    AcmeLtd	Workshop		1 MyRoad	MyTown	AB1 XYZ
  4. Premi ALT+F11 per avviare Visual Basic Editor.
  5. Inserisci un nuovo modulo e aggiungi il codice seguente. Ci sono due subroutine e una funzione di supporto. Entrambe le subroutine inseriscono i record di Access in Salesforce in blocco. La seconda subroutine mostra come utilizzare un'istruzione di inserimento SOQL parametrizzata.
  6. Option Compare Database
    
    Sub InsertAccounts()
    
        Dim con As New ADODB.Connection
        Dim comm As New ADODB.Command
        Dim PrmName As New ADODB.Parameter
        Dim PrmAddress As New ADODB.Parameter
        Dim PrmTown As New ADODB.Parameter
        Dim PrmPostCode As New ADODB.Parameter
        Dim PrmDescription As New ADODB.Parameter
        Dim RowCount As Long
        Dim i As Integer
        
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        
        Dim BlockCount As String
        Dim isPosted As Boolean
        
        RowCount = 0
        
        ' Open the connection to the Easysoft Salesforce SOQL ODBC Driver data source
        con.Open "SFSOQL"
        
        comm.ActiveConnection = con
        
        ' Set up the initial insert statement using ? for each column I am going to pass in
        comm.CommandText = "insert into Account (Name, BillingStreet, BillingCity, BillingPostalCode, Description ) values ( ?, ?, ?, ?, ? )"
        
        ' Bind all the columns to the statement
        Set PrmName = comm.CreateParameter("P1", adVarWChar, adParamInput, 255, Null)
        Set PrmAddress = comm.CreateParameter("P2", adVarWChar, adParamInput, 255, Null)
        Set PrmTown = comm.CreateParameter("P3", adVarWChar, adParamInput, 120, Null)
        Set PrmPostCode = comm.CreateParameter("P4", adVarWChar, adParamInput, 60, Null)
        Set PrmDescription = comm.CreateParameter("P5", adLongVarWChar, adParamInput, 255, Null)
        comm.Parameters.Append PrmName
        comm.Parameters.Append PrmAddress
        comm.Parameters.Append PrmTown
        comm.Parameters.Append PrmPostCode
        comm.Parameters.Append PrmDescription
        
        ' Create a connection to the local database and start working through the rows
        Set db = CurrentDb
        Set rs = db.OpenRecordset("select * from Account order by Id")
        BlockCount = 0
        Do While Not rs.EOF
        
            RowCount = RowCount + 1
        
            If BlockCount = 0 Then
                ' Start a new transaction
                con.BeginTrans
                isPosted = False
            End If
            BlockCount = BlockCount + 1
            
            Debug.Print RowCount & " : " & rs.Fields("AccName")
            DoEvents
            
            ' Prepare to transfer the data to the ODBC driver
            PrmName.Value = rs.Fields("AccName")
            
            If Not IsNull(rs.Fields("Address")) Then
                PrmAddress.Value = Replace(rs.Fields("Address"), ",", vbCrLf)
            Else
                PrmAddress.Value = Null
            End If
    
            If Not IsNull(rs.Fields("Town")) Then
                PrmTown.Value = rs.Fields("Town")
            Else
                PrmTown.Value = Null
            End If
            
            If Not IsNull(rs.Fields("Town")) Then
                PrmPostCode.Value = rs.Fields("PostCode")
            Else
                PrmPostCode.Value = Null
            End If
            
            If Not IsNull(rs.Fields("Property Description")) Then
                PrmDescription.Value = rs.Fields("Property Description")
            Else
                PrmDescription.Value = Null
            End If
            
            comm.Execute
        
            ' When 200 rows have been sent to the driver, commit
            If BlockCount = 200 Then
                Debug.Print "Block posted"
                con.CommitTrans
                isPosted = True
                BlockCount = 0
            End If
            
            ' Loop through the block until the end is reached
            rs.MoveNext
        Loop
        rs.Close
        db.Close
        
        ' Finally, if there are any rows left to commit, send them
        If Not isPosted Then con.CommitTrans
        
        con.Close
        
    End Sub
    
    Sub InsertAccountsParameterisedSOQL()
    
        Dim con As New ADODB.Connection
        
        Dim SQL As String
        Dim SQLBase As String
        Dim BlockCount As Long
        Dim isPosted As Boolean
        
        Dim RowCount As Long
        Dim i As Integer
        
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        
        RowCount = 0
        
        ' Open the connection to the Easysoft Salesforce SOQL ODBC Driver data source
        con.Open "SFSOQL"
        
        SQLBase = "insert into Account (Name, BillingStreet, BillingCity, BillingPostalCode, Description ) values ( "
    
        ' Create a connection to the local database and start working through the rows
        Set db = CurrentDb
        Set rs = db.OpenRecordset("select * from Account order by Id")
        BlockCount = 0
        Do While Not rs.EOF
        
            RowCount = RowCount + 1
        
            If BlockCount = 0 Then
          
                ' Start a new transaction
                con.BeginTrans
                isPosted = False
            End If
            BlockCount = BlockCount + 1
            
            Debug.Print RowCount & " : " & rs.Fields("AccName")
            DoEvents
            
            ' Prepare to transfer the data to the ODBC driver
            SQL = SQLBase
            If IsNull(rs.Fields("AccName")) Then
                SQL = SQL & "NULL, "
            Else
                SQL = SQL & "'" & EscQuotes(rs.Fields("AccName")) & "', "
            End If
            
            If IsNull(rs.Fields("Address")) Then
                SQL = SQL & "NULL, "
            Else
                SQL = SQL & "'" & EscQuotes(Replace(rs.Fields("Address"), ",", vbCrLf)) & "', "
            End If
    
            If Not IsNull(rs.Fields("Town")) Then
                SQL = SQL & "NULL, "
            Else
                SQL = SQL & "'" & EscQuotes(rs.Fields("Town")) & "', "
            End If
            
            If IsNull(rs.Fields("PostCode")) Then
                SQL = SQL & "NULL, "
            Else
                SQL = SQL & "'" & EscQuotes(rs.Fields("PostCode")) & "', "
            End If
            
            If IsNull(rs.Fields("Property Description")) Then
                SQL = SQL & "NULL) "
            Else
                SQL = SQL & "'" & EscQuotes(rs.Fields("Property Description")) & "')"
            End If
            
            con.Execute SQL
        
            ' When 200 rows have been sent to the driver then commit
            If BlockCount = 200 Then
                Debug.Print "Block posted"
                con.CommitTrans
                isPosted = True
                BlockCount = 0
            End If
            
            ' Loop through the block until the end is reached
            rs.MoveNext
        Loop
        rs.Close
        db.Close
        
        ' Finally, if there are any rows left to commit, send them
        If Not isPosted Then con.CommitTrans
        
        con.Close
        
    End Sub
    
    Function EscQuotes(inpStr As String) As String
    
        EscQuotes = Replace(inpStr, "'", "''")
    
    End Function
    
    
  7. Nel menu Esegui, usa Esegui sub/modulo utente per eseguire le subroutine.