Comment échapper les chaînes entre guillemets pour l'instruction SQL utilisée dans la base de données via Excel VBA

Partage maintenant:

SQL Server utilise des paires de guillemets simples pour identifier le start et fin d'une chaîne. L'insertion de "Mrs Brown's Boys" dans une table de base de données échouera car les trois guillemets simples impliquent deux chaînes, dont l'une est incomplète. Un caractère d'échappement est requis pour l'apostRophé d'après Brown. Cet article explore l'utilisation d'une fonction VBA personnalisée pour résoudre cette anomalie.

Cet article suppose que le lecteur a affiché le ruban Développeur et est familiarisé avec l'éditeur VBA. Si ce n'est pas le cas, veuillez Google "Excel Developer Tab" ou "Excel Code Window".

Le terme "base de données" s'applique ici aux bases de données "de puissance industrielle" comme SQL Server et Oracle.

Un exemple du cahier d'exercices utilisé dans cet exercice se trouve ici.

La chaîne SQL

Inclusion d'apostrophes (ou guillemets simples) à l'intérieur d'une instruction SQL fournit l'erreur suivante renvoyée par le gestionnaire de base de données (pour le nom O'Dowd dans ce cas) :Erreur renvoyée par le gestionnaire de base de données

Un caractère d'échappement est nécessaire, étant un double apostrophe au lieu d'un seul. Ainsi, O”Dowd est acceptable pour la base de données. O'Dowd ne l'est pas.

La fonction

Où les champs de capture pourraient éventuellement contenir un apostrophe, une fonction personnalisée peut être construite pour se déclencher avant la mise à jour, en remplaçant le guillemet simple par un double.

  1. Ouvrez un nouveau classeur ;
  1. Nommez la première feuille "Mise à jour" et complétez comme suit, en utilisant votre propre nom de base de données, etc. Ces champs seront utilisés pour construire une chaîne de connexion à SQL Server.Nommez la première feuille "Mise à jour" et complétez comme ceci
  2. Ouvrez la fenêtre de code et insérez un module. Utilisez les éléments de menu> Outils> Références pour référencer la bibliothèque ADOrarc'est-à-dire.Ouvrez la fenêtre de code et insérez un module

Copiez le code ci-dessous dans le module. Cela se connecte à la base de données.

Public connDB As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public strCriteria As String Sub ConnectDatabase() If connDB.State = 1 Then 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(" Update").Range("B5") Si strPWD > "" Alors strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Connection Timeout=30;" Sinon strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Authentification Windows End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect : MsgBox Err.Description End Sub
  1. Ajoutez la fonction dans le module :
Fonction fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Trouver la position de apostrophes Si x = 0 Alors Quitter Pour Si x > 0 Alors strWord = Left(strWord, x - 1) & Chr(39) & Chr(39) & Right(strWord, Len(strWord) - (x)) End If Next n fRemoveApostrophe = strWord Fonction de fin
  1. Ignorer la fonction.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Cette entrée SQL échouer; notez les trois apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Utilisez la fonction
Sub UseFunction() Appelez ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Insérer dans les valeurs tblCrewMember (LastName) ('" & strCriteria & "')" MsgBox strSQL & ". Cette entrée SQL réussira et apparaîtra dans la table de données en tant que O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Remplir l' Mises à jour feuille de travail comme suit, starting à la cellule A8:Remplir la feuille de travail de mise à jour
  1. Affecter les boutons aux macros IgnorerFonction et UtiliserFonction respectivement

Les Résultats

Une boîte de message affichera les résultats; aucune base de données n'est physiquement mise à jour dans cet exercice mais, si vous le souhaitez, assurez-vous que les noms de champs sont compatibles avec votre base de données et ajoutez l'instruction VBA conndb.execute(strSQL)

Récupération des plantages d'Excel

Excel est susceptible de planter lorsque votre ordinateur manque de ressources. Lors de la rédaction de cet exercice, la feuille de calcul d'Excel, qui n'a pas encore été enregistrée, s'est figée. La fenêtre Code était partiellement réactive, permettant la fermeture du classeur dans son ensemble. Il s'est avéré que le classeur s'est rouvert normalement avec le contenu et le code complets. Avait le temporary et les fichiers sources ont été (trop fréquemment) endommagés, le travail aurait dû être refait en l'absence d'outil pour résoudre dommage xlsx. Cela n'avait que peu d'importance dans ce cas, mais pouvait être un désastre potentiel pour les classeurs plus volumineux.

Introduction de l'auteur:

Felix Hooker est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris récupérer rar et produits logiciels de récupération sql. Pour plus d'informations, visitez www.datanumen.com

Partage maintenant:

Les commentaires sont fermés.