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