Cara Melarikan String yang Dikutip untuk Pernyataan SQL yang digunakan dalam Pangkalan Data melalui Excel VBA

Kongsi Sekarang:

SQL Server menggunakan pasangan petikan tunggal untuk mengenal pasti start dan hujung tali. Memasukkan 'Mrs Brown's Boys' ke dalam jadual pangkalan data akan gagal kerana tiga petikan tunggal menyiratkan dua rentetan, salah satunya tidak lengkap. Watak melarikan diri diperlukan untuk apostrophe selepas Brown. Artikel ini meneroka penggunaan fungsi VBA yang disesuaikan untuk menyelesaikan anomali ini.

Artikel ini menganggap pembaca memaparkan pita Pengembang dan sudah biasa dengan Editor VBA. Sekiranya tidak, sila Google "Tab Pembangun Excel" atau "Tetingkap Kod Excel".

Istilah "pangkalan data" di sini berlaku untuk pangkalan data "kekuatan industri" seperti SQL Server dan Oracle.

Contoh buku kerja yang digunakan dalam latihan ini boleh didapati di sini.

Rentetan SQL

Kemasukan apostrophes (atau petikan tunggal) di dalam pernyataan SQL memberikan ralat berikut yang dikembalikan dari pengurus pangkalan data (untuk nama O'Dowd dalam kes ini):Ralat Dikembalikan Dari Pengurus Pangkalan Data

Diperlukan watak melarikan diri, sebagai watak gandaostrophe dan bukannya satu. Oleh itu, O ”Dowd dapat diterima oleh pangkalan data. O'Dowd tidak.

Fungsinya

Di mana bidang tangkapan mungkin mengandungi apostrophe, fungsi khusus boleh dibina untuk diaktifkan sebelum kemas kini, menggantikan satu petikan dengan yang ganda.

  1. Buka buku kerja baru;
  1. Namakan helaian pertama "Kemas kini" dan lengkapkan seperti berikut, menggunakan nama pangkalan data anda sendiri, dll. Medan ini akan digunakan untuk membina rentetan sambungan ke SQL Server.Namakan Helaian Pertama "Kemas kini" Dan Lengkapkan Seperti Ini
  2. Buka tetingkap kod dan masukkan modul. Gunakan item menu> Alat> Rujukan untuk merujuk ADO librariaitu.Buka Tetingkap Kod Dan Masukkan Modul

Salin kod di bawah ke dalam modul. Ini menghubungkan ke pangkalan data.

ConnDB awam Sebagai ADODB Baru. Connection Public rs Sebagai ADODB.Recordset Awam strSQL Awam Sebagai String Public strKriteria Sebagai String Sub ConnectDatabase () Jika connDB.State = 1 Kemudian connDB.Close On Error GoTo ErrConnect Dim strServer, strDBase, strUser, strPWD As String strServer = Sheets ("Update"). Range ("B2") strDBase = Sheets ("Update"). Julat ("B3") strUser = Sheets ("Update"). Julat ("B4") strPWD = Helaian (" Kemas kini "). Julat (" B5 ") Jika strPWD>" "Kemudian strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Timeout Connection = 30; "Else strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "& strDBase 'Pengesahan Windows Tamat Jika connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub Sub
  1. Tambahkan fungsi ke dalam modul:
Fungsi fRemoveApostrophe (strWord As String) Dim n Sebagai Integer Dim x As Integer x = 0 Untuk n = 0 hingga 100 x = InStr (x + 2, strWord, "'")' Cari kedudukan apostrophes Jika x = 0 Kemudian Keluar Untuk Jika x> 0 Kemudian strWord = Kiri (strWord, x - 1) & Chr (39) & Chr (39) & Kanan (strWord, Len (strWord) - (x)) Tamat Jika Seterusnya n fRemoveApostrophe = fungsi Fungsi AkhirWord
  1. Abaikan fungsinya.
Sub IgnoreFunction () Call ConnectDatabase strCriteria = Sheets ("Update"). Julat ("B10") strSQL = "Masukkan ke nilai tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Entri SQL ini akan gagal; perhatikan tiga apostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) Sub Akhir
  1. Gunakan fungsinya
Sub UseFunction () Call ConnectDatabase strCriteria = Sheets ("Update"). Julat ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Masukkan ke nilai tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Entri SQL ini akan berjaya, dan muncul dalam datatable sebagai O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Lengkapkan Update lembaran kerja seperti berikut, starting di sel A8:Lengkapkan Lembaran Kerja Kemas kini
  1. Tetapkan butang ke makro AbaikanFungsi dan Fungsi Guna secara repektif

Keputusan

Kotak mesej akan menunjukkan hasilnya; tidak ada pangkalan data yang dikemas kini secara fizikal dalam latihan ini tetapi, jika anda ingin melakukannya, pastikan nama medan sesuai dengan pangkalan data anda, dan tambahkan menggunakan pernyataan VBA conndb.execute (strSQL)

Memulihkan dari kerosakan Excel

Excel terdedah kepada kerosakan ketika komputer anda kehabisan sumber. Semasa penulisan latihan ini, spreadsheet Excel, yang belum disimpan, membeku. Tetingkap Code sebahagiannya responsif, memungkinkan penutupan buku kerja secara keseluruhan. Ternyata, buku kerja dibuka semula seperti biasa dengan kandungan dan kodnya lengkap. Mempunyai temporary dan fail sumber (terlalu kerap) rosak, kerja itu mesti dibuat semula sekiranya tiada alat untuk menyelesaikannya kerosakan xlsx. Ini tidak begitu penting dalam kes ini, tetapi boleh menjadi bencana yang berpotensi untuk buku kerja lebih besar.

Pengenalan Pengarang:

Felix Hooker adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk pulih rar dan produk perisian pemulihan sql. Untuk maklumat lebih lanjut, lawati www.datanumen.com

Kongsi Sekarang:

Ruangan komen telah ditutup.