Версия 2+ на Salesforce ODBC драйвера ви позволява да групирате множество оператори за вмъкване на SOQL. Този блог ви показва как да вмъкнете множество записи на Microsoft Access в Salesforce.
За да започнете:
- Инсталирайте и лицензирайте Salesforce.com ODBC драйвера на машината, където е инсталиран Microsoft Access.
Преди да можете да използвате Salesforce.com ODBC драйвера, за да свържете приложението си към Salesforce.com, трябва да конфигурирате източник на ODBC данни. Източникът на ODBC данни съхранява подробностите за връзката за целевата база данни (напр. Salesforce.com) и ODBC драйвера, който е необходим за свързване с нея (например Salesforce.com ODBC драйвер).
За да стартирате ODBC Administrator (който използвате за създаване на източник на данни), в диалоговия прозорец Изпълнение на Windows въведете тази команда, ако използвате 64-битова версия на Microsoft Office:
%windir%\system32\odbcad32.exe
–Или–
Въведете тази команда, ако използвате 32-битова версия на Microsoft Office:
%windir%\syswow64\odbcad32.exe
Ако не сте сигурни дали вашата версия на Microsoft Office е 32-битова или 64-битова, стартирайте приложение на Office, напр. Microsoft Access и след това потърсете процеса на приложението в диспечера на задачите. Ако името на процеса е (за Microsoft Access) MSACCESS.EXE *32, Microsoft Office е 32-битов. Ако името на процеса е MSACCESS.EXE, Microsoft Office е 64-битов.
За да създадете източник на данни за Salesforce.com ODBC драйвер:
- В ODBC Administrator изберете раздела System DSN и след това изберете Добавяне.
- В диалоговия прозорец Създаване на нов източник на данни изберете Easysoft Salesforce ODBC SOQL драйвер и след това изберете Край.
- Попълнете диалоговия прозорец Easysoft Salesforce SOQL ODBC Driver DSN Setup:
Setting Стойност DSN SFSOQL Потребителско име Името на вашия потребител на Salesforce.com. Например myuser@mydomain.com. Парола Паролата за вашия потребител на Salesforce.com. Токен Токенът за защита за вашия потребител на Salesforce.com, ако е необходимо. За да разберете дали трябва да предоставите токен за защита, изберете бутона Тест. Ако опитът за свързване е неуспешен с грешка, която съдържа
LOGIN_MUST_USE_SECURITY_TOKEN, трябва да предоставите такъв.Salesforce.com изпраща по имейл токена за сигурност на имейл адреса, свързан с вашия потребителски акаунт в Salesforce.com. Ако не сте получили токен за сигурност, можете да го регенерирате. След това Salesforce.com ще ви изпрати по имейл новия токен за сигурност. За да регенерирате своя токен за сигурност, влезте в Salesforce.com и след това изберете Настройка от потребителското меню. Потърсете "сигурен маркер" в полето за бързо намиране. Щракнете върху Нулиране на маркера за защита на страницата Нулиране на маркера за защита. Когато получите маркера във вашия имейл клиент, копирайте го и след това го поставете в полето Token.
- Използвайте бутона Тест, за да потвърдите, че можете успешно да се свържете със Salesforce.com.
Microsoft Access
- Създайте нова база данни на Microsoft Access.
- Създайте таблица, наречена акаунт с тези колони:
Колона Тип данни ИД Автоматичен номер AccName Кратък текст Описание на свойството Кратък текст Адрес Кратък текст Град Кратък текст Пощенски код Кратък текст - Въведете някои примерни данни в таблицата. Например:
AccName Property Description Address Town PostCode MyCo Head Office 1 MyStreet MyTown AB1 DEF AcmeLtd Workshop 1 MyRoad MyTown AB1 XYZ
- Натиснете ALT+F11, за да стартирате редактора на Visual Basic.
- Вмъкнете нов модул и добавете следния код. Има две подпрограми и помощна функция. И двете подпрограми вмъкват групово записите на Access в Salesforce. Втората подпрограма показва как да използвате параметризиран оператор за вмъкване на SOQL.
- В менюто Run използвайте Run Sub/UserForm, за да стартирате подпрограмите.
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