Cara Melarikan Diri dari String yang Dikutip untuk Pernyataan SQL yang digunakan dalam Database melalui Excel VBA

Bagikan sekarang:

SQL Server menggunakan sepasang tanda kutip tunggal untuk mengidentifikasi awal dan akhir sebuah string. Memasukkan 'Mrs Brown's Boys' ke dalam tabel basis data akan gagal karena tiga tanda kutip tunggal tersebut menyiratkan dua string, salah satunya tidak lengkap. Karakter escape diperlukan untuk tanda apostrof setelah Brown. Artikel ini membahas penggunaan fungsi VBA yang telah dimodifikasi untuk mengatasi anomali ini.

Artikel ini mengasumsikan bahwa pembaca memiliki pita Pengembang yang ditampilkan dan terbiasa dengan Editor VBA. Jika tidak, harap Google "Tab Pengembang Excel" atau "Jendela Kode Excel".

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

Contoh buku kerja yang digunakan dalam latihan ini dapat ditemukan di sini.

String SQL

Penggunaan tanda apostrof (atau tanda kutip tunggal) di dalam pernyataan SQL akan menghasilkan kesalahan berikut dari pengelola basis data (dalam hal ini untuk nama O'Dowd):Kesalahan Dikembalikan Dari Manajer Database

Diperlukan karakter escape, yaitu tanda apostrof ganda, bukan yang tunggal. Dengan demikian, O”Dowd dapat diterima oleh basis data. O'Dowd tidak.

Fungsi

Jika kolom data yang dimasukkan mungkin berisi tanda apostrof, fungsi khusus dapat dibuat untuk dijalankan sebelum pembaruan, mengganti tanda kutip tunggal dengan tanda kutip ganda.

  1. Buka buku kerja baru;
  1. Beri nama sheet pertama "Update" dan lengkapi sebagai berikut, menggunakan nama database Anda sendiri, dll. Kolom ini akan digunakan untuk membuat string koneksi ke SQL Server.Beri Nama Lembar Pertama "Update" Dan Lengkapi Seperti Ini
  2. Buka jendela kode dan sisipkan modul. Gunakan item menu > Alat > Referensi untuk mereferensikan pustaka ADO.Buka Jendela Kode Dan Masukkan Modul

Salin kode di bawah ini ke dalam modul. Ini terhubung ke database.

ConnDB Publik Sebagai ADODB Baru.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As 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"). Range ("B3") strUser = Sheets ("Update"). Range ("B4") strPWD = Sheets (" Perbarui "). Range (" B5 ") If strPWD>" "Then strConnectionstring =" DRIVER = {SQL Server}; Server = "& strServer &"; Database = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Connection Timeout = 30; "Lain strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "Otentikasi Windows & strDBase 'Berakhir Jika connDB.ConnectionTimeout = 30 connDB. Buka strConnectionstring Keluar Sub ErrConnect: MsgBox Err.Description End Sub
  1. Tambahkan fungsi ke dalam modul:
Fungsi fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Cari posisi apostrof If x = 0 Then Exit For If x > 0 Then strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. Abaikan fungsinya.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Entri SQL ini akan gagal; perhatikan tiga tanda kutip." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Gunakan fungsinya
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Entri SQL ini akan berhasil, dan muncul di tabel data sebagai O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Lengkapi survei Memperbarui lembar kerja sebagai berikut, dimulai dari sel A8:Lengkapi Lembar Kerja Pembaruan
  1. Tetapkan tombol ke makro AbaikanFungsi ke GunakanFungsi secara berturut-turut

Hasil

Sebuah kotak pesan akan menunjukkan hasilnya; tidak ada database yang diperbarui secara fisik dalam latihan ini, tetapi jika Anda ingin melakukannya, pastikan nama bidang kompatibel dengan database Anda, dan tambahkan gunakan pernyataan VBA conndb.execute (strSQL)

Memulihkan dari crash Excel

Excel rentan mengalami crash ketika komputer kehabisan sumber daya. Selama penulisan latihan ini, spreadsheet Excel, yang belum disimpan, membeku. Jendela Kode sebagian responsif, memungkinkan penutupan seluruh buku kerja. Ternyata, buku kerja terbuka kembali secara normal dengan konten dan kode lengkap. Seandainya file sementara dan sumber (yang terlalu sering terjadi) rusak, pekerjaan harus diulang karena tidak adanya alat untuk mengatasinya. kerusakan xlsx. Itu tidak terlalu penting dalam kasus ini, tetapi bisa menjadi bencana potensial untuk workbook yang lebih besar.

Pengantar Penulis:

Felix Hooker adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk memulihkan barang langka dan produk perangkat lunak pemulihan sql. Untuk informasi lebih lanjut kunjungi www.datanumen.com

Bagikan sekarang:

Komentar ditutup.