Access
 sql >> Baza danych >  >> RDS >> Access

Masowe wstawki Salesforce z Microsoft Access

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:

  1. W Administratorze ODBC wybierz kartę Systemowe DSN, a następnie wybierz Dodaj.
  2. W oknie dialogowym Utwórz nowe źródło danych wybierz Sterownik Easysoft Salesforce ODBC SOQL, a następnie wybierz Zakończ.
  3. 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.

  4. Użyj przycisku Testuj, aby sprawdzić, czy możesz pomyślnie połączyć się z Salesforce.com.

Dostęp Microsoft

  1. Utwórz nową bazę danych Microsoft Access.
  2. 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
  3. 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
  4. Naciśnij ALT+F11, aby uruchomić Edytor Visual Basic.
  5. 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.
  6. 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
    
    
  7. W menu Uruchom użyj Run Sub/UserForm, aby uruchomić podprogramy.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź źródło kontroli wszystkich kontroli w projekcie MS Access

  2. Jak zmienić rozmiar kontrolek formularza w programie Access 2016

  3. 5 interesujących faktów na temat systemów zarządzania bazami danych

  4. Jak dodać logo do nagłówka formularza w programie Microsoft Access

  5. Korupcja bazy danych w MS Access i jak sobie z nią radzić