sql >> Databáze >  >> RDS >> Access

Hromadné vložky Salesforce z aplikace Microsoft Access

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:

  1. Ve správci ODBC vyberte kartu Systémové DSN a poté zvolte Přidat.
  2. V dialogovém okně Vytvořit nový zdroj dat zvolte ovladač Easysoft Salesforce ODBC SOQL a poté zvolte Dokončit.
  3. 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.

  4. Pomocí tlačítka Test ověřte, že se můžete úspěšně připojit k webu Salesforce.com.

Microsoft Access

  1. Vytvořte novou databázi Microsoft Access.
  2. 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
  3. 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
  4. Stisknutím ALT+F11 spusťte Editor jazyka Visual Basic.
  5. 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.
  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. V nabídce Spustit pomocí příkazu Run Sub/UserForm spusťte podprogramy.

  1. Jak přetypuji řetězec na celé číslo a budu mít 0 v případě chyby při přetypování s PostgreSQL?

  2. Získejte názvy tabulek pomocí příkazu SELECT v MySQL

  3. Nelze vložit explicitní hodnotu pro sloupec identity v tabulce 'tabulka', když je IDENTITY_INSERT nastaveno na OFF

  4. Heroku Postgresql s Google Datastudio