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...