SALVAR DATA NULL

NILTON.VIANNA 27/07/2016 23:25:55
#465194

Boa noite amigos
Depois de um milhão de vezes tentei salvar datas no Firebird com Visual Studio 2012

Para incluir novo tudo OK

.Parameters.Add(New FbParameter([Ô]@DtaNasc[Ô], FbDbType.Date)).Value = IIf(txtDtaNasc.Text = [Ô][Ô], DBNull.Value, txtDtaNasc.Text)

Com INSERT INTO salva a data ou em Null, OK.

Agora para o UPDATE esta difícil.


.CommandText = ([Ô]UPDATE Cad_Usuario SET Registro = [ô][Ô] & txtRegistro.Text & [Ô][ô], Nome = [ô][Ô] & txtNome.Text & [Ô][ô], Ende = [ô][Ô] & txtEnde.Text & [Ô][ô], DtaNasc = [Ô] & IIf(txtDtaNasc.Text = [Ô][Ô], [Ô]Null[Ô], [Ô][ô][Ô] & Format(txtDtaNasc.Text, [Ô]yyyy/mm/dd[Ô] & [Ô][ô][Ô])) & [Ô], FoneCel = [ô][Ô] & txtFoneCel.Text & [Ô][ô] WHERE UsuarioID = [Ô] & vUsuarioID)

Estou usando assim mais só grava Null ao digitar uma data do erro
(conversion error from [Ô]yyyy/mm/dd[Ô])

Grato

Nilton
KERPLUNK 27/07/2016 23:42:45
#465195
Sabe a diferença entre [Ô]null[Ô] e null? Você está tentando salvar a string [Ô]null[Ô] no lugar do tipo null. Qualquer valor entre aspas é entendido como string. Então basta tirar as aspas e vai funcionar.
Mas você não teria esses problemas se estivesse usando comandos parametrizados, que é o que todo programador profissional usa.
NILTON.VIANNA 28/07/2016 00:28:08
#465198

Mas você não teria esses problemas se estivesse usando comandos parametrizados, que é o que todo programador profissional usa.

Com certeza
Estou migrando do VB6, & Visual Studio 2012
KERPLUNK 28/07/2016 01:29:09
#465199
Citação:

:

Mas você não teria esses problemas se estivesse usando comandos parametrizados, que é o que todo programador profissional usa.

Com certeza
Estou migrando do VB6, & Visual Studio 2012


Visual Studio 2012 com qual versão do framework? Se for anterior ou igual ao 3.5 nem continua, vai estar perdendo tempo. Migrar não quer dizer copiar todo o código exatamente como era na versão anterior com adaptações sintáticas. Se vai migrar, já faça uso de todas as vantagens que a nova tecnologia oferece e dê sempre preferência à versão mais atual possível. Visual Studio 2012, já não tem mais nem suporte. O Visual Studio 2015 Community, é gratuito e está disponível para download. Ele faz uso da versão mais atual do Framework e você consegue fazer uso de todas as inúmeras vantagens de plugins e extensões disponíveis. A migração de um projeto(que na verdade é mais para re-escrever o projeto) pode ser feita em poucas horas dependendo do tamanho dele. Se for um projeto pequeno(coisa de umas 30-40 tabelas e telas) é trabalho de uns dois dias sozinho.
NILTON.VIANNA 28/07/2016 01:38:22
#465200
Grato
JOAOBENEVIDES 28/07/2016 08:10:42
#465203
KERPLUNK, descupe minha ignoracia ,quando voce diz comandos parametrizados poderia me passar um exemplo, eu uso comando simples pois foi assim que eu aprendei podemos sempre aprender coisa novas
PERCIFILHO 28/07/2016 08:57:54
#465206
Resposta escolhida
NILTON_VIANNA, por que você não usa o DbNull.Value também no Update?

IIf(txtDtaNasc.Text = [Ô][Ô], DbNull.Value, Format(txtDtaNasc.Text, [Ô]yyyy/mm/dd[Ô]))


JOAOBENEVIDES, o que o Kerplunk tem insistido para o pessoal fazer, é usar comando com parâmetros para incluir ou alterar dados na tabela, isso evita muitos problemas como já vimos em alguns tópicos anteriores.
Assim, um exemplo bem básico que eu peguei de um código antigo quando ainda não usava OOP. (Hoje não faço mais assim)
Aprendi muita coisa com os vídeos do Kerplunk e tudo o que eu fazia com muitas horas escrevendo códigos, hoje faço em minutos e com menos chance de errar.
Eis um exemplo de comando Insert usando parâmetros:

conectar()
cmdClientes = New OleDbCommand([Ô]Insert Into Clientes(codigo,nome,observacoes)Values(@codigo,@nome,@observacoes)[Ô], conexao)
cmdClientes.Connection = conexão
cmdClientes.Parameters.AddWithValue([Ô]@codigo[Ô], IIf(TxtCodigo.Text = [Ô][Ô], DBNull.Value, TxtCodigo.Text))
cmdClientes.Parameters.AddWithValue([Ô]@nome[Ô], IIf(TxtNome.Text = [Ô][Ô], DBNull.Value, TxtNome.Text))
cmdClientes.Parameters.AddWithValue([Ô]@observacoes[Ô], IIf(TxtObservacoes.Text = [Ô][Ô], DBNull.Value, TxtObservacoes.Text))
cmdClientes.ExecuteNonQuery()
Desconectar()

NILTON.VIANNA 28/07/2016 09:00:09
#465207
Valeu PERCIFILHO vou testar
NILTON.VIANNA 28/07/2016 09:02:15
#465208
e para o UPDATE ??

PERCIFILHO 28/07/2016 09:42:31
#465211
Só vai mudar o comando, os parâmetros são os mesmos:

conectar()
cmdClientes = New OleDbCommand([Ô]Update Cientes Set codigo=@codigo,nome=@nome,observacoes=@observações Where codigo = [Ô] & codigo)[Ô], conexao)
cmdClientes.Connection = conexão
cmdClientes.Parameters.AddWithValue([Ô]@codigo[Ô], IIf(TxtCodigo.Text = [Ô][Ô], DBNull.Value, TxtCodigo.Text))
cmdClientes.Parameters.AddWithValue([Ô]@nome[Ô], IIf(TxtNome.Text = [Ô][Ô], DBNull.Value, TxtNome.Text))
cmdClientes.Parameters.AddWithValue([Ô]@observacoes[Ô], IIf(TxtObservacoes.Text = [Ô][Ô], DBNull.Value, TxtObservacoes.Text))
cmdClientes.ExecuteNonQuery()
Desconectar()
NILTON.VIANNA 28/07/2016 19:50:22
#465228

PERCIFILHO, Perfect Help

Obrigado
Tópico encerrado , respostas não são mais permitidas