Excel VBA vasitəsilə verilənlər bazasında istifadə olunan SQL ifadəsi üçün sitat gətirilən sətirlərdən necə qaçmaq olar

İndi paylaş:

SQL Server sətrin başlanğıcını və sonunu müəyyən etmək üçün tək dırnaq cütlərindən istifadə edir. Verilənlər bazası cədvəlinə 'Mrs Brown's Boys' daxil etmək uğursuz olacaq, çünki üç tək dırnaq biri natamam olan iki sətri göstərir. Braundan sonra apostrof üçün qaçış simvolu tələb olunur. Bu məqalədə bu anomaliyanı həll etmək üçün xüsusi hazırlanmış VBA funksiyasının istifadəsi araşdırılır.

Bu məqalə oxucunun Tərtibatçı lentinin göstərildiyini və VBA Redaktoru ilə tanış olduğunu güman edir. Əgər belə deyilsə, lütfən Google “Excel Developer Tab” və ya “Excel Code Window”.

Buradakı "məlumat bazası" termini kimi "sənaye gücü" verilənlər bazalarına aiddir SQL Server və Oracle.

Bu məşqdə istifadə olunan iş dəftərinin nümunəsini tapa bilərsiniz burada.

SQL String

SQL ifadəsinin içərisinə apostrofların (və ya tək dırnaq işarələrinin) daxil edilməsi verilənlər bazası menecerindən (bu halda O'Dowd adı üçün) qaytarılan aşağıdakı xətanı verir:Verilənlər Bazası Menecerindən Xəta Qaytarıldı

Tək bir apostrof əvəzinə ikiqat apostrof olan bir qaçış simvolu tələb olunur. Beləliklə, O”Dowd verilənlər bazası üçün qəbul edilir, O'Dowd isə qəbul edilmir.

Funksiya

Tutma sahələrində apostrof ola biləcəyi hallarda, tək sitatı ikiqat sitatı ilə əvəz edərək yeniləmədən əvvəl işə salmaq üçün xüsusi bir funksiya yaradıla bilər.

  1. Yeni bir iş dəftəri açın;
  1. İlk vərəqi “Yeniləmə” adlandırın və öz verilənlər bazanız adından istifadə edərək aşağıdakı kimi tamamlayın. SQL Server.İlk Vərəqi "Yeniləmə" adlandırın və bu kimi tamamlayın
  2. Kod pəncərəsini açın və modul daxil edin. Menyu elementlərindən istifadə edin >Alətlər >ADO kitabxanalarına istinadlar.Kod pəncərəsini açın və modulu daxil edin

Aşağıdakı kodu modula köçürün. Bu verilənlər bazasına qoşulur.

İctimai konnDB Yeni ADODB.Bağlantı kimi İctimai rs Yeni ADODB.Recordset İctimai strSQL Simli İctimai strKriteriyalar kimi Simli Alt ConnectDatabase() Əgər connDB.State = 1 Əgər connDB.State = 2 Onda ConnDB.Close On ErrConnect Dim strServer, strDBase, strWD String, strServer = Vərəqlər("Yeniləmə").Range("B3") strDBase = Vərəqlər("Yeniləmə").Range("B4") strUser = Vərəqlər("Yeniləmə").Range("B5") strPWD = Vərəqlər(" Update").Range("BXNUMX") Əgər strPWD > "" Əgər strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Connection Timeout=30;" Əks halda strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Windows Authentication End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End
  1. Funksiyanı modula əlavə edin:
Function fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Apostrofların yerini tapın Əgər x = 0 olarsa, onda çıxın Əgər x > 0 olarsa, onda strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord End Function
  1. Funksiyaya məhəl qoymayın.
Sub IgnoreFunction() ConnectDatabase-i çağırın strCriteria = Sheets("Update").Range("B10") strSQL = "tblCrewMember (LastName) dəyərlərini daxil edin ('" & strCriteria & "')" MsgBox strSQL & ". Bu SQL girişi uğursuz olacaq; üç apostrofa diqqət yetirin." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Funksiyadan istifadə edin
Sub UseFunction() ConnectDatabase-i çağırın strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "tblCrewMember (LastName) dəyərlərini daxil edin ('" & strCriteria & "')" MsgBox strSQL & ". Bu SQL girişi uğur qazanacaq və verilənlər bazasında O'Dowd kimi görünəcək." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Tam Yeniləmələr iş səhifəsi aşağıdakı kimidir, xanadan başlayaraq A8:Yeniləmə İş Vərəqini tamamlayın
  1. Düymələri makrolara təyin edin Ignore Function və İstifadə funksiyası müvafiq olaraq

Nəticələr

Mesaj qutusu nəticələr göstərəcək; Bu məşqdə heç bir verilənlər bazası fiziki olaraq yenilənmir, lakin bunu etmək istəyirsinizsə, sahə adlarının verilənlər bazanızla uyğun olduğundan əmin olun və VBA ifadəsini əlavə edin conndb.execute(strSQL)

Excel qəzalarından bərpa

Kompüteriniz resurslardan qurtulduqda Excel işləməməyə meyllidir. Bu çalışmanın yazılması zamanı hələ yadda saxlanılmamış Excel elektron cədvəli donub qalıb. Kod pəncərəsi qismən cavabdeh olub və bu da iş kitabının bütövlükdə bağlanmasına imkan verib. Məlum olub ki, iş kitabı məzmun və kod tamamlanmış şəkildə normal şəkildə yenidən açılıb. Müvəqqəti və mənbə faylları (çox tez-tez) zədələnsəydi, problemi həll etmək üçün bir vasitə olmadığı təqdirdə iş yenidən yerinə yetirilməli olardı. xlsx zərər. Bu işdə az əhəmiyyət kəsb edirdi, lakin daha böyük iş dəftərləri üçün potensial fəlakət ola bilər.

Müəllif Giriş:

Feliks Hooker məlumatların bərpası üzrə mütəxəssisdir DataNumendaxil olmaqla məlumatların bərpası texnologiyaları üzrə dünya lideri olan , Inc rar faylını bərpa edin və sql bərpa proqram məhsulları. Ətraflı məlumat üçün ziyarət edin www.datanumen.com

İndi paylaş:

Şərhlər bağlıdır.