Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara membuat kueri passthrough / passthru dapat diedit?

Sejalan dengan komentar saya di atas dan jawaban oleh Yawar, saya tidak mengetahui bahwa Pass Through Query dapat diedit/diperbarui. Mereka dapat diedit dalam arti bahwa Anda dapat mengedit objek Pass Through Query yang disimpan, tetapi saya tidak yakin bahwa Pass Through Query dapat menghasilkan recordset yang dapat diedit.

Pada dasarnya ada dua metode untuk menghubungkan Access ke sumber data non-Access.

Metode pertama, dan yang paling populer, adalah dengan menggunakan beberapa bentuk tabel tertaut, umumnya tabel tertaut ODBC. Ada berbagai metode untuk menggunakan tabel tertaut ODBC dengan MS Access tetapi yang paling disukai pengembang adalah menggunakan koneksi DSN-Less yang diperbarui atau dibangun kembali (dihapus dan dihubungkan kembali) pada saat aplikasi Anda dimulai. Ketahuilah bahwa ketika Anda menggunakan ODBC, Anda juga masih menggunakan DAO. DAO adalah objek akses data default yang dibangun ke dalam MS Access dan bahkan ketika Anda tidak secara khusus menulis kode DAO apa pun, MS Access masih menggunakan DAO untuk menautkan formulir, laporan, dan kueri Anda ke sumber data Anda. Dalam kasus ODBC, Anda sebenarnya memiliki dua lapisan akses data di tempat kerja, DAO dan ODBC. Tetapi Anda dapat menggunakan ODBC/DAO dengan kinerja yang cukup baik dan tanpa menulis kode (selain untuk memelihara tabel tertaut ODBC).

Cara kedua adalah dengan menggunakan ADO. Berlawanan dengan kepercayaan populer, ini tidak berarti bahwa Anda harus menggunakan formulir yang tidak terikat. Tapi itu berarti Anda harus menulis lebih banyak kode daripada menggunakan JET/DAO/MSAccess atau DAO/ODBC/SSQL Server. Anda harus menulis kode untuk membawa catatan dari database Anda ke dalam dan ADO Recordset dan kemudian menggunakan kode untuk mengikat formulir Anda ke Recordset itu. Anda harus menulis lebih banyak kode untuk menjaga agar formulir anak tetap sinkron dengan formulir induk, untuk memasukkan kunci asing ke dalam formulir anak saat catatan baru dibuat, dan untuk berbagai hal lain juga seperti pemfilteran dan pengurutan sebagai pemfilteran dan pengurutan bawaan formulir pilihan biasanya tidak bekerja dengan recordset ADO. ADO adalah cara yang bagus untuk berbicara dengan SQL Server karena benar-benar memberi Anda banyak kontrol, tetapi karena kodenya intens, dan karena Tabel Tertaut ODBC bekerja dengan sangat baik, sebagian besar pengembang tidak merekomendasikan penggunaan ADO kecuali tidak ada cara lain untuk melakukan apa Anda ingin lakukan. Salah satu contohnya adalah memanggil Stored Procedures. Saya percaya Pass Through Query dapat digunakan untuk memanggil Stored Procedures tetapi saya juga berpikir ada beberapa batasan di sana (seperti menggunakan Parameter). Saya percaya dalam banyak kasus pengembang menggunakan ADO untuk memanggil prosedur tersimpan. Saya sering menggunakan ADO tetapi saya tidak banyak menggunakan Prosedur Tersimpan (belum) jadi saya tidak memiliki banyak informasi tentang itu.

Satu hal lain yang layak disebutkan adalah bahwa DAO dengan ODBC menggunakan "pemuatan malas" tetapi ADO memaksa Anda untuk menarik semua data yang bisa sangat memakan waktu dan menghabiskan banyak memori jika Anda memiliki> jutaan baris. Atau Anda perlu menerapkan semacam paging.

Fungsi saya sendiri untuk membuat satu tabel DSN-Less ODBC Linked ada di bawah. Jika Anda baru mengenal Access dan baru mengenal VBA, ini mungkin tidak masuk akal bagi Anda. Kode menghapus definisi tabel apa pun yang sudah ada untuk tabel yang Anda coba tautkan, yang sedikit berbahaya karena saya yakin itu bisa menghapus tabel lokal yang tidak tertaut yang tidak Anda inginkan. Penanganan kesalahan di sini juga tidak terlalu cepat, tetapi sebagian besar kode contoh online tidak memiliki penanganan kesalahan yang baik di dalamnya karena komplikasi yang terlibat. Pembuatan Indeks Kunci Utama pada tabel tertaut tidak selalu diperlukan. Saya hanya memasukkannya ke dalam fungsi saya karena saya membutuhkannya satu kali untuk proyek tertentu, jadi sekarang saya meninggalkannya di sana dan menggunakannya, baik atau buruk.

Untuk memanfaatkan kode ini dengan benar, Anda benar-benar perlu memiliki daftar semua tabel tertaut Anda di suatu tempat dan beralih melalui daftar itu dan memanggil fungsi ini untuk setiap tabel. Fungsi ini memungkinkan Anda untuk menautkan tabel menggunakan nama yang berbeda dari nama sebenarnya di SQL Server. Anda juga harus memiliki cara membangun string koneksi ODBC yang valid yang harus diteruskan ke fungsi ini juga.

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

Ada beberapa sumber yang sangat bagus yang harus Anda periksa tentang DAO, ADO, Pass Through Query, SQL Server, dll:

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

Berikut adalah contoh pengikatan formulir ke ADO Recordset. Ini sedikit menyesatkan karena yang terbaik adalah memiliki objek koneksi global yang tetap terbuka selama runtime aplikasi. Ini memungkinkan Anda untuk menggunakan kumpulan rekaman ADO yang dapat diperbarui secara otomatis. Menggunakan latihan ini juga dapat membuat kumpulan catatan Anda menjadi objek tingkat formulir.

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. Mengapa Anda membuat Tampilan dalam database?

  2. Kembalikan baris dalam urutan yang tepat saat mereka dimasukkan

  3. Periksa Surat Tidak Terkirim di SQL Server (T-SQL)

  4. Cara mengelompokkan waktu berdasarkan jam atau 10 menit

  5. Klien dengan alamat IP tidak diizinkan untuk mengakses database server Azure SQL