SQL - Fazendo o tratamento de datas , valores numéricos e strings.

Você já deve estar cansado de saber quais as principais instruções SQL usadas para incluir , alterar e excluir código ; mas nunca é demais relembrar , não é mesmo : INSERT INTO ... VALUES , UPDATE , DELETE FROM.

Não vou me ater a sintaxe dos comandos mas gostaria de abordar um aspecto que as vezes pode causar muitas dores de cabeça quando usamos estas instruções.

Para incluir valores em um banco de dados usamos a instrução INSERT INTO. Então , se quisermos incluir valores numa tabela clientes que possua os seguintes campos : Nome , Endereco , DataNascimento ,Desconto

Podemos usar a seguinte instrução :

INSERT INTO clientes (Nome , Endereco , DataNascimento, Desconto)
VALUES
('Carlos D'Silva','Rua Lins 10','10/31/1945',3,14)

Contudo , o comando utilizado acima irá FALHAR ! Sabe porquê ? Vejamos :

1- Cuidado com strings com aspostrófo

Quando uma string for usada como uma valor a ser tratado por uma instrução SQL e contiver um apóstrofo pode ocorrer confusão com os apostrófes usados para delimitar a string. Veja o exemplo:

'Carlos D'Silva'

Tudo se passa como se a string terminasse no segundo apóstrofo : 'Carlos D'

A forma correta de usar o valor acima seria assim : 'Carlos D''Silva'

Para resolver o problema você deve fazer o seguinte: Toda vez que for construir uma instrução SQL com valores strings você tem que ter certeza de que cada apóstrofo seja substituído por dois apóstrofos. Para realizar tal tarefa você pode usar o comando REPLACE do VB6 :

NovoValor = Replace ( Valor , " ' " , " '' ")

Obs:Se você não tem o vb6 pode usar a seguinte função para obter o mesmo efeito:

Public Function Replace(Valor As String, _
ProcuraPor As String, TrocaPor As String) As String

Dim curposicao As Long
curposicao = 1

Do
  curposicao = InStr(curposicao, Valor, ProcuraPor)

  Valor = Left$(Valor, curposicao - 1) & TrocaPor & _
  Right$(Valor, Len(Valor) - curposicao - Len(ProcuraPor) + 1)

Loop Until InStr(Valor, ProcuraPor) <> 0

Replace = Valor

End Function

2- Cuidado com ponto decimal

Uma vírgula na lista VALUES é usada para separar os valores . O símbolo decimal padrão é o ponto (.) . Então se você fornecer um valor com uma vírgula a instrução vai falhar pois é como se você estivesse informando dois valores.

A forma correta para : 3,14 é 3.14

Para evitar o problema ( principalmente quando as configurações regionais usarem vírgulas como decimais ) você precisa substituir a vírgula pelo ponto: Você pode usar também a função REPLACE do vb6:

NovoValor = Replace ( Valor , "," , "." )

Obs: Para quem não tem o VB6 pode usar a seguinte função: A chamada é feita assim - Converte(3,14)

Function converte(Valor As Double)
Dim NovoValor As String
NovoValor = Format(Valor)
If InStr(NovoValor, ",") <> 0 Then
  Mid(NovoValor, InStr(NovoValor, ","), 1) = "."
  converte = NovoValor
End If
End Function

3- Cuidados com datas

As datas podem ser usadas de diversas formas , dependendo do Banco de dados usado , Assim temos :

- Access - Podemos usar as datas delimitidas pela cerquilha ( # ) - Ex: #01/06/90#

- SQL Server - Podemos inserir datas usando uma expressão de data válida em uma string. Ex: '01/06/90'

Obs: No formato americano o mês vem antes do dia : mm/dd/yyyy

Até a próxima...