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 myuser@mitdomain.com. 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