Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Chèn Lực lượng Bán hàng Hàng loạt từ Microsoft Access

Phiên bản 2+ của trình điều khiển Salesforce ODBC cho phép bạn kết hợp nhiều câu lệnh Chèn SOQL. Blog này hướng dẫn bạn cách chèn nhiều bản ghi Microsoft Access vào Salesforce.

Để bắt đầu:

  • Cài đặt và cấp phép cho Trình điều khiển ODBC Salesforce.com trên máy đã cài đặt Microsoft Access.

Trước khi bạn có thể sử dụng Trình điều khiển ODBC Salesforce.com để kết nối ứng dụng của bạn với Salesforce.com, bạn cần định cấu hình nguồn dữ liệu ODBC. Nguồn dữ liệu ODBC lưu trữ chi tiết kết nối cho cơ sở dữ liệu đích (ví dụ:Salesforce.com) và trình điều khiển ODBC được yêu cầu để kết nối với nó (ví dụ:trình điều khiển ODBC Salesforce.com).

Để chạy Quản trị viên ODBC (mà bạn sử dụng để tạo nguồn dữ liệu), trong hộp thoại Chạy Windows, hãy nhập lệnh này nếu bạn đang sử dụng phiên bản 64-bit của Microsoft Office:

%windir%\system32\odbcad32.exe

–Hay–

Nhập lệnh này nếu bạn đang sử dụng phiên bản 32-bit của Microsoft Office:

%windir%\syswow64\odbcad32.exe

Nếu bạn không chắc phiên bản Microsoft Office của mình là 32 bit hay 64 bit, hãy khởi động ứng dụng Office, ví dụ:Microsoft Access, sau đó tìm quy trình của ứng dụng trong Trình quản lý tác vụ. Nếu tên quy trình là (dành cho Microsoft Access) MSACCESS.EXE * 32, thì Microsoft Office là 32-bit. Nếu tên quy trình là MSACCESS.EXE, thì Microsoft Office là 64-bit.

Để tạo nguồn dữ liệu Trình điều khiển ODBC Salesforce.com:

  1. Trong Quản trị viên ODBC, hãy chọn tab DSN Hệ thống, sau đó chọn Thêm.
  2. Trong hộp thoại Tạo Nguồn Dữ liệu Mới, chọn Trình điều khiển SOQL Easysoft Salesforce ODBC, sau đó chọn Kết thúc.
  3. Hoàn thành hộp thoại Thiết lập Easysoft Salesforce SOQL ODBC Driver DSN:
    Setting Giá trị
    DSN SFSOQL
    Tên người dùng Tên của người dùng Salesforce.com của bạn. Ví dụ:[email protected].
    Mật khẩu Mật khẩu cho người dùng Salesforce.com của bạn.
    Mã thông báo Mã thông báo bảo mật cho người dùng Salesforce.com của bạn, nếu được yêu cầu.

    Để tìm hiểu xem bạn có cần cung cấp mã thông báo bảo mật hay không, hãy chọn nút Kiểm tra. Nếu nỗ lực kết nối không thành công với lỗi chứa LOGIN_MUST_USE_SECURITY_TOKEN , bạn cần cung cấp một cái.

    Salesforce.com gửi mã thông báo bảo mật qua email đến địa chỉ email được liên kết với tài khoản người dùng Salesforce.com của bạn. Nếu bạn chưa nhận được mã thông báo bảo mật, bạn có thể tạo lại nó. Sau đó, Salesforce.com sẽ gửi mã thông báo bảo mật mới qua email cho bạn. Để tạo lại mã thông báo bảo mật của bạn, hãy đăng nhập vào Salesforce.com, sau đó chọn Thiết lập từ menu người dùng. Tìm kiếm "mã thông báo bảo mật" trong hộp Tìm nhanh. Nhấp vào Đặt lại Mã thông báo Bảo mật trong trang Đặt lại Mã thông báo Bảo mật. Khi bạn nhận được mã thông báo trong ứng dụng email của mình, hãy sao chép nó rồi dán vào trường Mã thông báo.

  4. Sử dụng nút Kiểm tra để xác minh rằng bạn có thể kết nối thành công với Salesforce.com.

Microsoft Access

  1. Tạo cơ sở dữ liệu Microsoft Access mới.
  2. Tạo một bảng được gọi là Tài khoản với các cột sau:
    Column Loại dữ liệu
    ID Số tự động
    Tên miền Văn bản ngắn
    Mô tả tài sản Văn bản ngắn
    Địa chỉ Văn bản ngắn
    Thị trấn Văn bản ngắn
    Mã bưu điện Văn bản ngắn
  3. Nhập một số dữ liệu mẫu vào bảng. Ví dụ:
    AccName	Property Description	Address		Town	PostCode
    MyCo	Head Office		1 MyStreet	MyTown	AB1 DEF
    AcmeLtd	Workshop		1 MyRoad	MyTown	AB1 XYZ
  4. Nhấn ALT + F11 để khởi động Trình soạn thảo Visual Basic.
  5. Chèn một mô-đun mới và thêm mã sau. Có hai chương trình con và một chức năng trợ giúp. Cả hai chương trình con đều chèn hàng loạt bản ghi Access vào Salesforce. Chương trình con thứ hai chỉ ra cách sử dụng câu lệnh chèn SOQL được tham số hóa.
  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. Trên menu Run, sử dụng Run Sub / UserForm để chạy các chương trình con.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 lợi ích được hưởng khi bạn nâng cấp cơ sở dữ liệu của mình

  2. Cơ sở dữ liệu phụ thuộc là gì?

  3. JetShowPlan:A Primer

  4. Access nói chuyện với các nguồn dữ liệu ODBC như thế nào? Phần 5

  5. Mảng đối tượng lớp VBA Ms-Access