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 L'utilisation de paires de guillemets simples permet d'identifier le début et la fin d'une chaîne de caractères. 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 nécessaire pour l'apostrophe 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

L'inclusion d'apostrophes (ou de guillemets simples) dans une instruction SQL provoque 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

Il faut un caractère d'échappement : une double apostrophe au lieu d'une seule. Ainsi, « O”Dowd » est accepté par la base de données, contrairement à « O'Dowd ».

La fonction

Lorsque les champs de capture peuvent contenir une apostrophe, une fonction personnalisée peut être créée pour se déclencher avant la mise à jour, remplaçant l'apostrophe simple par une apostrophe 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 le menu Outils > Références pour référencer les bibliothèques ADO.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 des apostrophes 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. Ignorer la fonction.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "INSERT INTO tblCrewMember (LastName) VALUES ('" & strCriteria & "')" MsgBox strSQL & ". Cette requête SQL échouera ; notez les trois apostrophes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Utilisez la fonction
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "INSERT INTO tblCrewMember (LastName) VALUES ('" & strCriteria & "')" MsgBox strSQL & ". Cette requête SQL réussira et apparaîtra dans la table de données sous le nom O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Remplir l' Mises à jour feuille de calcul comme suit, en commençant par 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 sujet aux plantages lorsque les ressources de votre ordinateur sont insuffisantes. Lors de la rédaction de cet exercice, la feuille de calcul Excel, non encore enregistrée, s'est bloquée. La fenêtre de code répondait partiellement, ce qui a permis de fermer le classeur. Finalement, celui-ci s'est rouvert normalement, avec le contenu et le code intacts. Si les fichiers temporaires et sources avaient été (ce qui est malheureusement trop fréquent) endommagés, le travail aurait dû être refait faute d'outil de réparation. 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.