Access
 sql >> Base de données >  >> RDS >> Access

Insertions Salesforce en masse à partir de Microsoft Access

La version 2+ du pilote ODBC Salesforce vous permet de regrouper plusieurs instructions d'insertion SOQL. Ce blog vous montre comment insérer plusieurs enregistrements Microsoft Access dans Salesforce.

Pour commencer :

  • Installez et autorisez le pilote ODBC Salesforce.com sur la machine sur laquelle Microsoft Access est installé.

Avant de pouvoir utiliser le pilote ODBC Salesforce.com pour connecter votre application à Salesforce.com, vous devez configurer une source de données ODBC. Une source de données ODBC stocke les détails de connexion pour la base de données cible (par exemple, Salesforce.com) et le pilote ODBC requis pour s'y connecter (par exemple, le pilote ODBC Salesforce.com).

Pour exécuter l'administrateur ODBC (que vous utilisez pour créer une source de données), dans la boîte de dialogue Exécuter de Windows, tapez cette commande si vous utilisez une version 64 bits de Microsoft Office :

%windir%\system32\odbcad32.exe

–Ou–

Tapez cette commande si vous utilisez une version 32 bits de Microsoft Office :

%windir%\syswow64\odbcad32.exe

Si vous ne savez pas si votre version de Microsoft Office est 32 bits ou 64 bits, démarrez une application Office, par ex. Microsoft Access, puis recherchez le processus de l'application dans le Gestionnaire des tâches. Si le nom du processus est (pour Microsoft Access) MSACCESS.EXE *32, Microsoft Office est 32 bits. Si le nom du processus est MSACCESS.EXE, Microsoft Office est 64 bits.

Pour créer une source de données de pilote ODBC Salesforce.com :

  1. Dans ODBC Administrator, choisissez l'onglet System DSN, puis choisissez Add.
  2. Dans la boîte de dialogue Créer une nouvelle source de données, choisissez Easysoft Salesforce ODBC SOQL Driver, puis choisissez Finish.
  3. Renseignez la boîte de dialogue Configuration du DSN du pilote SOQL ODBC d'Easysoft Salesforce :
    Paramètre Valeur
    DSN SFSOQL
    Nom d'utilisateur Le nom de votre utilisateur Salesforce.com. Par exemple, [email protected].
    Mot de passe Le mot de passe de votre utilisateur Salesforce.com.
    Jeton Le jeton de sécurité de votre utilisateur Salesforce.com, si nécessaire.

    Pour savoir si vous devez fournir un jeton de sécurité, choisissez le bouton Tester. Si la tentative de connexion échoue avec une erreur contenant LOGIN_MUST_USE_SECURITY_TOKEN , vous devez en fournir un.

    Salesforce.com envoie le jeton de sécurité par e-mail à l'adresse e-mail associée à votre compte d'utilisateur Salesforce.com. Si vous n'avez pas reçu de jeton de sécurité, vous pouvez le régénérer. Salesforce.com vous enverra ensuite le nouveau jeton de sécurité par e-mail. Pour régénérer votre jeton de sécurité, connectez-vous à Salesforce.com, puis choisissez Configuration dans le menu utilisateur. Recherchez « jeton de sécurité » dans la case Recherche rapide. Cliquez sur Réinitialiser le jeton de sécurité dans la page Réinitialiser le jeton de sécurité. Lorsque vous recevez le jeton dans votre client de messagerie, copiez-le, puis collez-le dans le champ Jeton.

  4. Utilisez le bouton Tester pour vérifier que vous pouvez vous connecter avec succès à Salesforce.com.

Accès Microsoft

  1. Créer une nouvelle base de données Microsoft Access.
  2. Créez une table appelée Compte avec ces colonnes :
    Colonne Type de données
    identifiant NuméroAuto
    AccName ShortText
    Description de la propriété ShortText
    Adresse ShortText
    Ville ShortText
    Code Postal ShortText
  3. Entrez des exemples de données dans le tableau. Par exemple :
    AccName	Property Description	Address		Town	PostCode
    MyCo	Head Office		1 MyStreet	MyTown	AB1 DEF
    AcmeLtd	Workshop		1 MyRoad	MyTown	AB1 XYZ
  4. Appuyez sur ALT+F11 pour démarrer Visual Basic Editor.
  5. Insérez un nouveau module et ajoutez le code suivant. Il existe deux sous-programmes et une fonction d'assistance. Les deux sous-routines insèrent les enregistrements Access dans Salesforce en bloc. La deuxième sous-routine montre comment utiliser une instruction d'insertion SOQL paramétrée.
  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. Dans le menu Exécuter, utilisez Run Sub/UserForm pour exécuter les sous-routines.