Cómo escapar de las cadenas entre comillas para la declaración SQL utilizada en la base de datos a través de Excel VBA

Comparte ahora:

SQL Server usa pares de comillas simples para identificar la starty final de una cadena. La inserción de 'Mrs Brown's Boys' en una tabla de base de datos fallará ya que las tres comillas simples implican dos cadenas, una de las cuales está incompleta. Se requiere un carácter de escape para la apostrophe después de Brown. Este artículo explora el uso de una función de VBA personalizada para resolver esta anomalía.

Este artículo asume que el lector muestra la cinta de desarrollador y está familiarizado con el editor de VBA. De lo contrario, busque en Google "Pestaña de desarrollador de Excel" o "Ventana de código de Excel".

El término "base de datos" aquí se aplica a las bases de datos de "potencia industrial" como SQL Server y Oracle.

Puede encontrar un ejemplo del libro de trabajo utilizado en este ejercicio aquí.

La cadena SQL

Inclusión de postrophes (o comillas simples) dentro de una declaración SQL proporciona el siguiente error devuelto por el administrador de la base de datos (para el nombre O'Dowd en este caso):Error devuelto por el administrador de la base de datos

Se necesita un carácter de escape, siendo una doble apostrophe en lugar de uno solo. Por lo tanto, O ”Dowd es aceptable para la base de datos. O'Dowd no lo es.

La función

Donde los campos de captura posiblemente podrían contener una apostrophe, se puede crear una función personalizada para que se active antes de la actualización, reemplazando la comilla simple por una doble.

  1. Abra un nuevo libro de trabajo;
  1. Nombra la primera hoja "Actualizar" y completa de la siguiente manera, usando tu propio nombre de base de datos, etc. Estos campos se usarán para construir una cadena de conexión a SQL Server.Nombra la primera hoja "Actualizar" y completa así
  2. Abra la ventana de código e inserte un módulo. Utilice los elementos de menú> Herramientas> Referencias para hacer referencia a ADO librares.Abra la ventana de código e inserte un módulo

Copie el siguiente código en el módulo. Esto se conecta a la base de datos.

Public connDB como nuevo ADODB.Connection Public rs como nuevo ADODB.Recordset Public strSQL como string Public strCriteria como string Sub ConnectDatabase () Si connDB.State = 1 entonces connDB.Close en error Ir a ErrConnect Dim strServer, strDBase, strUser, strPWD como string strServer = Sheets ("Actualizar"). Range ("B2") strDBase = Sheets ("Actualizar"). Range ("B3") strUser = Sheets ("Actualizar"). Range ("B4") strPWD = Sheets (" Actualizar "). Rango (" B5 ") Si strPWD>" "Entonces strConnectionstring =" DRIVER = {SQL Server}; Servidor = "& strServer &"; Base de datos = "& strDBase &"; Uid = "& strUser &"; Pwd = "& strPWD &"; Tiempo de espera de conexión = 30; "Else strConnectionstring =" DRIVER = {SQL Server}; SERVER = "& strServer &"; Trusted_Connection = yes; DATABASE = "& strDBase 'Autenticación de Windows End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub
  1. Agregue la función al módulo:
Función fRemoveApostrophe (strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr (x + 2, strWord, "'")' Encuentra la posición de postrophes Si x = 0 Luego Salir For If x> 0 Entonces strWord = Left (strWord, x - 1) & Chr (39) & Chr (39) & Right (strWord, Len (strWord) - (x)) End If Next n fRemoveApostrophe = strWord Función final
  1. Ignore la función.
Sub IgnoreFunction () Llame a ConnectDatabase strCriteria = Sheets ("Update"). Range ("B10") strSQL = "Insertar en tblCrewMember (LastName) valores ('" & strCriteria & "')" MsgBox strSQL & ". Esta entrada SQL fallar; tenga en cuenta los tres apostrophes. "Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Usa la función
Sub UseFunction () Llame a ConnectDatabase strCriteria = Sheets ("Actualizar"). Range ("B15") strCriteria = fRemoveApostrophe (strCriteria) strSQL = "Insertar en tblCrewMember (LastName) valores ('" & strCriteria & "')" MsgBox strSQL & ". Esta entrada SQL se realizará correctamente y aparecerá en la tabla de datos como O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Completa el formulario Actualizar hoja de trabajo de la siguiente manera, starting en la celda A8:Complete la hoja de trabajo de actualización
  1. Asignar los botones a macros IgnorarFunción y Función de uso respectivamente

Los resultados

Un cuadro de mensaje mostrará los resultados; ninguna base de datos se actualiza físicamente en este ejercicio pero, si desea hacerlo, asegúrese de que los nombres de los campos sean compatibles con su base de datos y agregue use la instrucción VBA conndb.execute (strSQL)

Recuperación de fallas de Excel

Excel es propenso a fallar cuando su computadora se está quedando sin recursos. Durante la redacción de este ejercicio, la hoja de cálculo de Excel, aún sin guardar, se congeló. La ventana Código respondió parcialmente, lo que permitió el cierre del libro de trabajo en su totalidad. Al final resultó que, el libro de trabajo se volvió a abrir normalmente con el contenido y el código completos. Tenía el temporary y los archivos de origen se dañaron (con demasiada frecuencia), el trabajo habría tenido que rehacerse en ausencia de una herramienta para resolver xlsx daño. En este caso, tuvo poca importancia, pero podría ser un desastre potencial para libros de trabajo más grandes.

Introducción del autor:

Felix Hooker es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo recuperar rar y productos de software de recuperación de sql. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.