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 Utiliza pares de comillas simples para identificar el inicio y el final de una cadena. Insertar "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 el apóstrofe después de Brown. Este artículo explora el uso de una función 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 oráculo.

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

La cadena SQL

La inclusión de apóstrofes (o comillas simples) dentro de una instrucción SQL produce 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, que consiste en un apóstrofo doble en lugar de uno simple. Por lo tanto, O”Dowd es aceptable para la base de datos. O'Dowd no lo es.

La función

En los casos en que los campos de captura puedan contener un apóstrofo, se puede crear una función personalizada que se ejecute 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 del menú >Herramientas >Referencias para hacer referencia a las bibliotecas ADO.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, "'") 'Encontrar la posición de los apóstrofes 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. Ignore la función.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Esta entrada SQL fallará; observe los tres apóstrofes." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Usa la función
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Insertar en tblCrewMember (LastName) valores ('" & strCriteria & "')" MsgBox strSQL & ". Esta entrada SQL se ejecutará 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 cálculo de la siguiente manera, comenzando 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 tiende a fallar cuando el ordenador se queda sin recursos. Durante la redacción de este ejercicio, la hoja de cálculo de Excel, aún sin guardar, se bloqueó. La ventana de código respondía parcialmente, lo que permitió cerrar el libro de trabajo por completo. Finalmente, el libro de trabajo se volvió a abrir con normalidad, con el contenido y el código completos. Si los archivos temporales y de origen se hubieran dañado (algo que ocurre con demasiada frecuencia), el trabajo habría tenido que rehacerse al no existir una herramienta para resolver el problema. 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.