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

Làm cách nào để có thể chỉnh sửa truy vấn passthrough / passthru?

Phù hợp với nhận xét của tôi ở trên và câu trả lời của Yawar, tôi không biết rằng Truy vấn Chuyển qua có thể chỉnh sửa / cập nhật được. Chúng có thể chỉnh sửa theo nghĩa là bạn có thể chỉnh sửa một đối tượng Truy vấn chuyển qua lưu, nhưng tôi không tin rằng Truy vấn chuyển qua có thể tạo ra một tập bản ghi có thể chỉnh sửa.

Về cơ bản có hai phương pháp để kết nối Access với nguồn dữ liệu không phải Access.

Phương pháp đầu tiên, và phổ biến nhất, là sử dụng một số dạng bảng được liên kết, thường là bảng được liên kết ODBC. Có nhiều phương pháp sử dụng bảng được liên kết ODBC với MS Access nhưng điều mà hầu hết các nhà phát triển thích là sử dụng các kết nối DSN-Less được làm mới hoặc xây dựng lại (xóa và kết nối lại) tại thời điểm ứng dụng của bạn khởi động. Lưu ý rằng khi bạn sử dụng ODBC, bạn cũng vẫn đang sử dụng DAO. DAO là đối tượng truy cập dữ liệu mặc định được tích hợp trong MS Access và ngay cả khi bạn không viết bất kỳ mã DAO cụ thể nào, MS Access vẫn đang sử dụng DAO để liên kết biểu mẫu, báo cáo và truy vấn với nguồn dữ liệu của bạn. Trong trường hợp ODBC, bạn thực sự có hai lớp truy cập dữ liệu tại nơi làm việc, DAO và ODBC. Nhưng bạn có thể sử dụng ODBC / DAO với hiệu suất khá tốt và không cần viết mã (ngoài việc duy trì các bảng được liên kết ODBC).

Phương pháp thứ hai là sử dụng ADO. Trái với suy nghĩ của nhiều người, điều này không có nghĩa là bạn phải sử dụng các biểu mẫu không ràng buộc. Nhưng nó có nghĩa là bạn phải viết nhiều mã hơn là sử dụng JET / DAO / MSAccess hoặc DAO / ODBC / SSQL Server. Bạn phải viết mã để đưa các bản ghi từ cơ sở dữ liệu của bạn vào và ADO Recordset, sau đó sử dụng mã để liên kết biểu mẫu của bạn với Recordset đó. Bạn phải viết thêm mã để giữ cho biểu mẫu con đồng bộ với biểu mẫu mẹ, để chèn khóa ngoại vào biểu mẫu con khi bản ghi mới được tạo và cho nhiều thứ khác, chẳng hạn như lọc và sắp xếp như tính năng lọc và sắp xếp tích hợp của biểu mẫu các tùy chọn thường không hoạt động với tập bản ghi ADO. ADO là một cách tuyệt vời để nói chuyện với SQL Server vì nó thực sự cung cấp cho bạn rất nhiều quyền kiểm soát, nhưng vì nó có cường độ mã cao và vì Bảng liên kết ODBC hoạt động rất tốt, hầu hết các nhà phát triển không khuyên bạn nên sử dụng ADO trừ khi không còn cách nào khác để làm gì bạn muốn làm. Một ví dụ về điều này là gọi Thủ tục lưu trữ. Tôi tin rằng Truy vấn Vượt qua có thể được sử dụng để gọi các Thủ tục đã Lưu trữ nhưng tôi cũng nghĩ rằng có một số hạn chế ở đó (chẳng hạn như sử dụng Tham số). Tôi tin rằng trong hầu hết các trường hợp, các nhà phát triển sử dụng ADO để gọi các thủ tục được lưu trữ. Tôi sử dụng ADO rất nhiều nhưng tôi không sử dụng Thủ tục lưu trữ nhiều (chưa) nên tôi không có nhiều thông tin về điều đó.

Một điều đáng nói khác là DAO với ODBC sử dụng "lazy loading" nhưng ADO buộc bạn phải kéo tất cả dữ liệu, điều này có thể rất tốn thời gian và tiêu tốn nhiều bộ nhớ nếu bạn có> hàng triệu hàng. Hoặc nếu không, bạn sẽ cần triển khai một số loại phân trang.

Dưới đây là chức năng của riêng tôi để tạo một bảng được liên kết DSN-Ít ODBC hơn. Nếu bạn là người mới sử dụng Access và mới sử dụng VBA, điều này có thể không có nhiều ý nghĩa đối với bạn. Mã xóa bất kỳ định nghĩa bảng nào đã tồn tại cho bảng bạn đang cố liên kết, điều này hơi nguy hiểm vì tôi tin rằng nó có thể xóa một bảng cục bộ, không được liên kết mà bạn không muốn. Việc xử lý lỗi ở đây cũng không thực sự nhanh, nhưng hầu hết các mã ví dụ trực tuyến không có khả năng xử lý lỗi tốt trong đó vì các phức tạp liên quan. Việc tạo Chỉ mục khóa chính trên bảng được liên kết không phải lúc nào cũng cần thiết. Tôi chỉ có nó được tích hợp vào chức năng của mình bởi vì tôi cần nó một lần cho một dự án cụ thể, vì vậy bây giờ tôi để nó ở đó và sử dụng nó, tốt hơn hoặc tệ hơn.

Để sử dụng đúng mã này, bạn thực sự cần có một danh sách tất cả các bảng được liên kết của mình ở đâu đó và lặp qua danh sách đó và gọi hàm này cho mỗi bảng. Chức năng này cho phép bạn liên kết bảng với một tên khác với tên thực của nó trong SQL Server. Bạn cũng cần có cách xây dựng một chuỗi kết nối ODBC hợp lệ, chuỗi này cũng phải được chuyển vào hàm này.

Private Sub LinkODBCTable(sSourceTableName As String, _
                        sLocalTableName As String, _
                        sPrimaryKeyField As String, _
                        sConString As String)

    Dim dbCurrent As DAO.Database
    Dim tdfCurrent As DAO.TableDef
    Set dbCurrent = DBEngine.Workspaces(0).Databases(0)

    On Error Resume Next
    'Be Careful, this could delete a local, non-linked table.
    dbCurrent.TableDefs.Delete sLocalTableName
    If Err.Number <> 0 Then
        If Err.Number = 3011 Then
            'Table does not exist
        Else
            MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
        End If
        Err.Clear
    End If

    On Error GoTo 0

    Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
    tdfCurrent.Connect = sConString
    tdfCurrent.sourceTableName = sSourceTableName
    dbCurrent.TableDefs.Append tdfCurrent

    On Error Resume Next
    If sPrimaryKeyField <> "" Then
        dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sPrimaryKeyField & ")", dbFailOnError
        If Err.Number <> 0 Then
            If Err.Number = 3283 Then
                'Primary Key Already Exists
            Else
                MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
            End If
            Err.Clear
        End If
    End If

    Set tdfCurrent = Nothing
    Set dbCurrent = Nothing
End Sub

Có một số tài nguyên thực sự tốt mà bạn nên xem liên quan đến DAO, ADO, Truyền qua truy vấn, SQL Server, v.v.:

http://technet.microsoft.com /en-us/library/bb188204%28v=sql.90%29.aspx
http://www.utteraccess.com/wiki/Choosing_between_DAO_and_ADO

Đây là một ví dụ về liên kết biểu mẫu với Tập bản ghi ADO. Tuy nhiên, nó hơi gây hiểu lầm vì tốt nhất nên có một đối tượng kết nối toàn cục vẫn mở trong thời gian chạy của ứng dụng. Điều này cho phép bạn sử dụng các tập bản ghi ADO có thể cập nhật tự động. Sử dụng phương pháp này cũng có thể làm cho tập bản ghi của bạn trở thành một đối tượng cấp biểu mẫu.

http://msdn.microsoft .com / en-us / library / office / bb243828% 28v =office.12% 29.aspx



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh các ngày được lưu trữ dưới dạng varchar

  2. Sử dụng SqlParameter trong mệnh đề SQL LIKE không hoạt động

  3. Cách tự động hóa quy trình đồng bộ hóa lược đồ cơ sở dữ liệu SQL Server

  4. Cách chuyển Loại bảng do người dùng xác định làm tham số có thủ tục được lưu trữ trong C #

  5. Làm tròn số DECIMAL (14,3) đến chữ số thập phân thứ ba trong SQL 2008