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

Masse Salesforce-indlæg fra Microsoft Access

Version 2+ af Salesforce ODBC-driveren giver dig mulighed for at batchere flere SOQL Insert-sætninger. Denne blog viser dig, hvordan du indsætter flere Microsoft Access-poster i Salesforce.

Sådan kommer du i gang:

  • Installer og licensér Salesforce.com ODBC-driveren på den maskine, hvor Microsoft Access er installeret.

Før du kan bruge Salesforce.com ODBC-driveren til at forbinde din applikation til Salesforce.com, skal du konfigurere en ODBC-datakilde. En ODBC-datakilde gemmer forbindelsesdetaljerne for måldatabasen (f.eks. Salesforce.com) og den ODBC-driver, der kræves for at oprette forbindelse til den (f.eks. Salesforce.com ODBC-driveren).

For at køre ODBC Administrator (som du bruger til at oprette en datakilde), skal du skrive denne kommando i Windows Kør-dialogboksen, hvis du bruger en 64-bit version af Microsoft Office:

%windir%\system32\odbcad32.exe

–Eller–

Indtast denne kommando, hvis du bruger en 32-bit version af Microsoft Office:

%windir%\syswow64\odbcad32.exe

Hvis du ikke er sikker på, om din version af Microsoft Office er 32-bit eller 64-bit, så start en Office-applikation f.eks. Microsoft Access, og se derefter efter programmets proces i Task Manager. Hvis procesnavnet er (for Microsoft Access) MSACCESS.EXE *32, er Microsoft Office 32-bit. Hvis procesnavnet er MSACCESS.EXE, er Microsoft Office 64-bit.

Sådan oprettes en Salesforce.com ODBC Driver-datakilde:

  1. I ODBC Administrator skal du vælge fanen System DSN og derefter vælge Tilføj.
  2. Vælg Easysoft Salesforce ODBC SOQL-driver i dialogboksen Opret ny datakilde, og vælg derefter Udfør.
  3. Fuldfør dialogboksen Easysoft Salesforce SOQL ODBC Driver DSN Setup:
    Indstilling Værdi
    DSN SFSOQL
    Brugernavn Navnet på din Salesforce.com-bruger. For eksempel [email protected].
    Adgangskode Adgangskoden til din Salesforce.com-bruger.
    Token Sikkerhedstokenet for din Salesforce.com-bruger, hvis det kræves.

    For at finde ud af, om du skal levere et sikkerhedstoken, skal du vælge knappen Test. Hvis forbindelsesforsøget mislykkes med en fejl, der indeholder LOGIN_MUST_USE_SECURITY_TOKEN , skal du levere en.

    Salesforce.com sender sikkerhedstokenet til den e-mailadresse, der er knyttet til din Salesforce.com-brugerkonto. Hvis du ikke har modtaget et sikkerhedstoken, kan du genskabe det. Salesforce.com vil derefter e-maile det nye sikkerhedstoken til dig. For at genskabe dit sikkerhedstoken skal du logge ind på Salesforce.com og derefter vælge Opsætning i brugermenuen. Søg efter "sikkerhedstoken" i feltet Find hurtigt. Klik på Nulstil sikkerhedstoken på siden Nulstil sikkerhedstoken. Når du modtager tokenet i din e-mail-klient, skal du kopiere det og derefter indsætte det i feltet Token.

  4. Brug knappen Test til at bekræfte, at du kan oprette forbindelse til Salesforce.com.

Microsoft Access

  1. Opret en ny Microsoft Access-database.
  2. Opret en tabel kaldet Konto med disse kolonner:
    Kolonne Datatype
    ID Autonummerering
    AccName Korttekst
    Egenskabsbeskrivelse Korttekst
    Adresse Korttekst
    By Korttekst
    Postnummer Korttekst
  3. Indtast nogle eksempeldata i tabellen. For eksempel:
    AccName	Property Description	Address		Town	PostCode
    MyCo	Head Office		1 MyStreet	MyTown	AB1 DEF
    AcmeLtd	Workshop		1 MyRoad	MyTown	AB1 XYZ
  4. Tryk på ALT+F11 for at starte Visual Basic Editor.
  5. Indsæt et nyt modul, og tilføj følgende kode. Der er to underrutiner og en hjælpefunktion. Begge underrutiner indsætter adgangsposterne i Salesforce i bulk. Den anden underrutine viser, hvordan man bruger en parametriseret SOQL insert-sætning.
  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. I menuen Kør skal du bruge Kør Sub/UserForm til at køre underrutinerne.

  1. Hvad er det længst mulige verdensomspændende telefonnummer, jeg bør overveje i SQL varchar(længde) for telefon

  2. Min OOW15-tur er fuldført

  3. Mineplaner:Ikke kun for planens cache

  4. 4 måder at konvertere et tal til en procentdel i SQL Server (T-SQL)