Como escapar de strings entre aspas para instrução SQL usada no banco de dados via Excel VBA

Compartilhe agora:

SQL Server Utiliza pares de aspas simples para identificar o início e o fim de uma string. Inserir 'Mrs Brown's Boys' em uma tabela de banco de dados falhará, pois as três aspas simples indicam duas strings, uma das quais está incompleta. É necessário um caractere de escape para o apóstrofo depois de Brown. Este artigo explora o uso de uma função VBA personalizada para resolver essa anomalia.

Este artigo pressupõe que o leitor tenha a faixa Desenvolvedor exibida e esteja familiarizado com o Editor VBA. Se não, por favor, Google “Excel Developer Tab” ou “Excel Code Window”.

O termo “banco de dados” aqui se aplica a bancos de dados de “força industrial” como SQL Server e Oracle.

Um exemplo da pasta de trabalho usada neste exercício pode ser encontrado aqui..

A Cadeia SQL

A inclusão de apóstrofos (ou aspas simples) dentro de uma instrução SQL resulta no seguinte erro retornado pelo gerenciador de banco de dados (para o nome O'Dowd, neste caso):Erro retornado do gerenciador de banco de dados

É necessário um caractere de escape, sendo este um apóstrofo duplo em vez de um único. Portanto, O”Dowd é aceitável no banco de dados. O'Dowd não é.

A função

Nos casos em que os campos de captura possam conter um apóstrofo, uma função personalizada pode ser criada para ser executada antes da atualização, substituindo a aspa simples por uma aspa dupla.

  1. Abra uma nova pasta de trabalho;
  1. Nomeie a primeira planilha como "Atualizar" e preencha da seguinte maneira, usando seu próprio nome de banco de dados, etc. Esses campos serão usados ​​para criar uma string de conexão para SQL Server.Nomeie a primeira folha como "Atualizar" e preencha como este
  2. Abra a janela de código e insira um módulo. Use os itens de menu > Ferramentas > Referências para referenciar bibliotecas ADO.Abra a janela de código e insira um módulo

Copie o código abaixo no módulo. Isso se conecta ao banco de dados.

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("Atualizar").Range("B2") strDBase = Sheets("Atualizar").Range("B3") strUser = Sheets("Atualizar").Range("B4") strPWD = Sheets(" Update").Range("B5") If strPWD > "" Then strConnectionstring = "DRIVER={SQL Server};Server=" & strServer & ";Database=" & strDBase & ";Uid=" & strUser & ";Pwd=" & strPWD & ";Connection Timeout=30;" Else strConnectionstring = "DRIVER={SQL Server};SERVER=" & strServer & ";Trusted_Connection=yes;DATABASE=" & strDBase 'Autenticação do Windows End If connDB.ConnectionTimeout = 30 connDB.Open strConnectionstring Exit Sub ErrConnect: MsgBox Err.Description End Sub
  1. Adicione a função no módulo:
Função fRemoveApostrophe(strWord As String) Dim n As Integer Dim x As Integer x = 0 For n = 0 To 100 x = InStr(x + 2, strWord, "'") 'Encontra a posição dos apóstrofos 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 a função.
Sub IgnoreFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B10") strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Esta entrada SQL falhará; observe os três apóstrofos." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Use a função
Sub UseFunction() Call ConnectDatabase strCriteria = Sheets("Update").Range("B15") strCriteria = fRemoveApostrophe(strCriteria) strSQL = "Insert into tblCrewMember (LastName) values ​​('" & strCriteria & "')" MsgBox strSQL & ". Esta entrada SQL será bem-sucedida e aparecerá na tabela de dados como O'Dowd." Debug.Print strSQL 'connDB.Execute (strSQL) End Sub
  1. Complete o Atualizar planilha da seguinte forma, começando na célula A8:Preencha a planilha de atualização
  1. Atribuir os botões a macros Função Ignorar e UsarFunção respectivamente

Os resultados

Uma caixa de mensagem mostrará os resultados; nenhum banco de dados é atualizado fisicamente neste exercício, mas, se desejar, certifique-se de que os nomes dos campos sejam compatíveis com seu banco de dados e adicione use a instrução VBA conndb.execute(strSQL)

Recuperando-se de falhas do Excel

O Excel tende a travar quando o computador está ficando sem recursos. Durante a elaboração deste exercício, a planilha do Excel, ainda não salva, congelou. A janela de código respondia parcialmente, permitindo o fechamento da pasta de trabalho por completo. Felizmente, a pasta de trabalho reabriu normalmente, com o conteúdo e o código intactos. Se os arquivos temporários e de origem tivessem sido corrompidos (o que acontece com muita frequência), o trabalho teria que ser refeito, na ausência de uma ferramenta para resolver o problema. dano xlsx. Foi de pouca importância neste caso, mas pode ser um desastre potencial para pastas de trabalho maiores.

Introdução do autor:

Felix Hooker é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo recuperar rar e produtos de software de recuperação SQL. Para mais informações visite www.datanumen.com

Compartilhe agora:

Comentários estão fechados.