Wersja 2+ sterownika Salesforce ODBC umożliwia grupowanie wielu instrukcji SOQL Insert. Ten blog pokazuje, jak wstawić wiele rekordów Microsoft Access do Salesforce.
Aby rozpocząć:
- Zainstaluj i uzyskaj licencję na sterownik ODBC Salesforce.com na komputerze, na którym jest zainstalowany Microsoft Access.
Zanim będzie można użyć sterownika ODBC Salesforce.com do połączenia aplikacji z Salesforce.com, należy skonfigurować źródło danych ODBC. Źródło danych ODBC przechowuje szczegóły połączenia z docelową bazą danych (np. Salesforce.com) oraz sterownik ODBC wymagany do połączenia z nią (np. sterownik ODBC Salesforce.com).
Aby uruchomić Administratora ODBC (którego używasz do tworzenia źródła danych), w oknie dialogowym Uruchom systemu Windows wpisz to polecenie, jeśli używasz 64-bitowej wersji pakietu Microsoft Office:
%windir%\system32\odbcad32.exe
–Lub–
Wpisz to polecenie, jeśli używasz 32-bitowej wersji pakietu Microsoft Office:
%windir%\syswow64\odbcad32.exe
Jeśli nie masz pewności, czy Twoja wersja Microsoft Office jest 32- czy 64-bitowa, uruchom aplikację Office, np. Microsoft Access, a następnie poszukaj procesu aplikacji w Menedżerze zadań. Jeśli nazwa procesu to (dla Microsoft Access) MSACCESS.EXE *32, Microsoft Office jest 32-bitowy. Jeśli nazwa procesu to MSACCESS.EXE, Microsoft Office jest 64-bitowy.
Aby utworzyć źródło danych sterownika ODBC Salesforce.com:
- W Administratorze ODBC wybierz kartę Systemowe DSN, a następnie wybierz Dodaj.
- W oknie dialogowym Utwórz nowe źródło danych wybierz Sterownik Easysoft Salesforce ODBC SOQL, a następnie wybierz Zakończ.
- Wypełnij okno dialogowe Konfiguracja DSN sterownika Easysoft Salesforce SOQL ODBC:
Ustawienie Wartość DSN SFSOQL Nazwa użytkownika Nazwa użytkownika Salesforce.com. Na przykład [email protected]. Hasło Hasło użytkownika Salesforce.com. Token Token bezpieczeństwa dla użytkownika Salesforce.com, jeśli jest wymagany. Aby dowiedzieć się, czy musisz dostarczyć token bezpieczeństwa, wybierz przycisk Test. Jeśli próba połączenia nie powiedzie się z błędem zawierającym
LOGIN_MUST_USE_SECURITY_TOKEN
, musisz go dostarczyć.Salesforce.com wysyła e-mailem token bezpieczeństwa na adres e-mail powiązany z Twoim kontem użytkownika Salesforce.com. Jeśli nie otrzymałeś tokena bezpieczeństwa, możesz go zregenerować. Salesforce.com wyśle do Ciebie e-mailem nowy token bezpieczeństwa. Aby zregenerować token bezpieczeństwa, zaloguj się do Salesforce.com, a następnie wybierz Ustawienia z menu użytkownika. Wyszukaj „token bezpieczeństwa” w polu Szybkie wyszukiwanie. Kliknij Resetuj token zabezpieczający na stronie Resetuj token zabezpieczający. Gdy otrzymasz token w swoim kliencie poczty e-mail, skopiuj go, a następnie wklej w polu Token.
- Użyj przycisku Testuj, aby sprawdzić, czy możesz pomyślnie połączyć się z Salesforce.com.
Dostęp Microsoft
- Utwórz nową bazę danych Microsoft Access.
- Utwórz tabelę o nazwie Konto z następującymi kolumnami:
Kolumna Typ danych ID Autonumerowanie NazwaKonta Krótki tekst Opis właściwości Krótki tekst Adres Krótki tekst Miasto Krótki tekst Kod pocztowy Krótki tekst - Wprowadź do tabeli przykładowe dane. Na przykład:
AccName Property Description Address Town PostCode MyCo Head Office 1 MyStreet MyTown AB1 DEF AcmeLtd Workshop 1 MyRoad MyTown AB1 XYZ
- Naciśnij ALT+F11, aby uruchomić Edytor Visual Basic.
- Wstaw nowy moduł i dodaj następujący kod. Istnieją dwa podprogramy i funkcja pomocnicza. Oba podprogramy zbiorczo wstawiają rekordy dostępu do Salesforce. Drugi podprogram pokazuje, jak używać sparametryzowanej instrukcji wstawiania SOQL.
- W menu Uruchom użyj Run Sub/UserForm, aby uruchomić 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