Verze 2+ ovladače Salesforce ODBC umožňuje dávkovat více příkazů SOQL Insert. Tento blog vám ukáže, jak vložit více záznamů Microsoft Access do Salesforce.
Chcete-li začít:
- Nainstalujte a licencujte ovladač ODBC Salesforce.com na počítači, kde je nainstalován Microsoft Access.
Než budete moci použít Salesforce.com ODBC Driver k připojení vaší aplikace k Salesforce.com, musíte nakonfigurovat zdroj dat ODBC. Zdroj dat ODBC ukládá podrobnosti o připojení pro cílovou databázi (např. Salesforce.com) a ovladač ODBC, který je vyžadován pro připojení k ní (např. ovladač ODBC Salesforce.com).
Chcete-li spustit Správce ODBC (který používáte k vytvoření zdroje dat), zadejte v dialogovém okně Spustit ve Windows tento příkaz, pokud používáte 64bitovou verzi sady Microsoft Office:
%windir%\system32\odbcad32.exe
–Nebo–
Tento příkaz zadejte, pokud používáte 32bitovou verzi sady Microsoft Office:
%windir%\syswow64\odbcad32.exe
Pokud si nejste jisti, zda je vaše verze Microsoft Office 32bitová nebo 64bitová, spusťte aplikaci Office, např. Microsoft Access a poté vyhledejte proces aplikace ve Správci úloh. Pokud je název procesu (pro Microsoft Access) MSACCESS.EXE *32, je Microsoft Office 32bitový. Pokud je název procesu MSACCESS.EXE, je Microsoft Office 64bitový.
Chcete-li vytvořit zdroj dat ovladače Salesforce.com ODBC Driver:
- Ve správci ODBC vyberte kartu Systémové DSN a poté zvolte Přidat.
- V dialogovém okně Vytvořit nový zdroj dat zvolte ovladač Easysoft Salesforce ODBC SOQL a poté zvolte Dokončit.
- Dokončete dialogové okno Nastavení DSN ovladače Easysoft Salesforce SOQL ODBC Driver:
Nastavení Hodnota DSN SFSOQL Uživatelské jméno Jméno vašeho uživatele Salesforce.com. Například [email protected]. Heslo Heslo pro vašeho uživatele Salesforce.com. Token Bezpečnostní token pro vašeho uživatele Salesforce.com, je-li vyžadován. Chcete-li zjistit, zda potřebujete dodat bezpečnostní token, zvolte tlačítko Test. Pokud se pokus o připojení nezdaří s chybou, která obsahuje
LOGIN_MUST_USE_SECURITY_TOKEN
, musíte jeden dodat.Salesforce.com odešle e-mailem bezpečnostní token na e-mailovou adresu spojenou s vaším uživatelským účtem Salesforce.com. Pokud jste neobdrželi bezpečnostní token, můžete jej znovu vytvořit. Salesforce.com vám poté pošle e-mailem nový bezpečnostní token. Chcete-li znovu vytvořit svůj bezpečnostní token, přihlaste se na Salesforce.com a poté z uživatelské nabídky vyberte Nastavení. V poli Rychlé hledání vyhledejte „token zabezpečení“. Na stránce Resetovat bezpečnostní token klikněte na Obnovit bezpečnostní token. Když token obdržíte do svého e-mailového klienta, zkopírujte jej a vložte do pole Token.
- Pomocí tlačítka Test ověřte, že se můžete úspěšně připojit k webu Salesforce.com.
Microsoft Access
- Vytvořte novou databázi Microsoft Access.
- Vytvořte tabulku s názvem Účet s těmito sloupci:
Sloupec Typ dat ID Automatické číslo AccName Krátký text Popis vlastnosti Krátký text Adresa Krátký text Město Krátký text PSČ Krátký text - Zadejte do tabulky ukázková data. Například:
AccName Property Description Address Town PostCode MyCo Head Office 1 MyStreet MyTown AB1 DEF AcmeLtd Workshop 1 MyRoad MyTown AB1 XYZ
- Stisknutím ALT+F11 spusťte Editor jazyka Visual Basic.
- Vložte nový modul a přidejte následující kód. Existují dva podprogramy a pomocná funkce. Oba podprogramy hromadně vkládají záznamy Accessu do Salesforce. Druhý podprogram ukazuje, jak používat parametrizovaný příkaz SOQL insert.
- V nabídce Spustit pomocí příkazu Run Sub/UserForm spusťte podprogramy.
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