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:
- I ODBC Administrator skal du vælge fanen System DSN og derefter vælge Tilføj.
- Vælg Easysoft Salesforce ODBC SOQL-driver i dialogboksen Opret ny datakilde, og vælg derefter Udfør.
- 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.
- Brug knappen Test til at bekræfte, at du kan oprette forbindelse til Salesforce.com.
Microsoft Access
- Opret en ny Microsoft Access-database.
- Opret en tabel kaldet Konto med disse kolonner:
Kolonne Datatype ID Autonummerering AccName Korttekst Egenskabsbeskrivelse Korttekst Adresse Korttekst By Korttekst Postnummer Korttekst - 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
- Tryk på ALT+F11 for at starte Visual Basic Editor.
- 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.
- I menuen Kør skal du bruge Kør Sub/UserForm til at køre underrutinerne.
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