INSERT INTO NULL OU DATA

POCE1DON 28/07/2016 23:11:03
#465241
Por favor, alguém pode me dar uma luz, esclarecer, tirar essa dúvida...

resumidamente é assim:

na tabela tenho: [ô]codigo[ô], [ô]data[ô], [ô]valor[ô]
no form os campo: txtcodigo, txtdata, txtvalor

txtdata as vezes possui uma data informada e as vezes não

tentei fazer o [ô]insert into[ô] assim:

insert into tabela (codigo, data, valor) values (txtcodigo, iif(isdate(txtdata) = true, txtdata, null), txtvalor)

preciso que o valor fique nulo na tabela quando não for informado uma data, mas sempre é acusado erro de
[ô]data type[ô] por conta desse [ô]iif[ô] que foi usado, já que se retirar o iif colocar apenas o valor de txtdata ou
null, tudo da certo.

uma solução seria utilizar um recordset pra deixar o campo null quando não houver uma data, mas
o que eu gostaria de fazer é não declarar um recordset, usar apenas o [ô]execute[ô] da conexão para
fazer o trabalho com o [ô]insert into[ô], e quando não houver a data, o valor ser nulo.

existe outra forma de [ô]verificar[ô] o txtdata sem um [ô]iif[ô] na mesma linha?

obrigado!
KERPLUNK 28/07/2016 23:40:23
#465243
Resposta escolhida
KERPLUNK 28/07/2016 23:42:23
#465244
Só uma pergunta: Você trabalha como programador mesmo por conta ou para alguma empresa?
POCE1DON 28/07/2016 23:51:55
#465245
Citação:

:
Use comandos parametrizados.



muitas coisas que faço já são assim, mas a solução que eu queria, com a parametrização não é o que eu estava pensando ser
queria algo mais simples, como fazemos com o simples [ô]iif[ô]

Citação:

:
Só uma pergunta: Você trabalha como programador mesmo por conta ou para alguma empresa?



quanto à pergunta, sou autônomo mesmo e curioso

agora é minha vez: porque a curiosidade?
KERPLUNK 28/07/2016 23:55:38
#465246
Parametrização é além de a solução correta, a mais simples.
é estive olhando o seu histórico de perguntas, e tem várias com essa mesma temática de dificuldade com comandos SQL e várias delas já bem antigas, o que indica que tem um bom tempo que você está apanhando para isso...
POCE1DON 29/07/2016 00:10:12
#465247
Citação:

:
Parametrização é além de a solução correta, a mais simples.
é estive olhando o seu histórico de perguntas, e tem várias com essa mesma temática de dificuldade com comandos SQL e várias delas já bem antigas, o que indica que tem um bom tempo que você está apanhando para isso...



Vc tem razão, SQL as vezes está me fazendo perder bons cabelos da cabeça.
Mas é assim mesmo quando a gente quer aprender por conta própria. Se houvesse mais tempo para dedicação, talvez estaria [Ô]apanhando[Ô] menos.
Maioria dos meus tópicos foram referentes à SQL, mas estou consciente que outros ainda virão...
KERPLUNK 29/07/2016 00:16:26
#465248
Citação:

:
:
Parametrização é além de a solução correta, a mais simples.
é estive olhando o seu histórico de perguntas, e tem várias com essa mesma temática de dificuldade com comandos SQL e várias delas já bem antigas, o que indica que tem um bom tempo que você está apanhando para isso...

Vc tem razão, SQL as vezes está me fazendo perder bons cabelos da cabeça.
Mas é assim mesmo quando a gente quer aprender por conta própria. Se houvesse mais tempo para dedicação, talvez estaria [Ô]apanhando[Ô] menos.
Maioria dos meus tópicos foram referentes à SQL, mas estou consciente que outros ainda virão...


Sinceramente, acho que você está estudando(e aprendendo) da maneira errada. O melhor caminho para você seria:
1 - Esquecer como aprendeu até agora, já que tem tempo e ainda não conseguiu desenvolver um aprendizado eficiente.
2 - Entender SQL de verdade. Todas as queries básicas de seleção, inserção, deleção, atualização, todas as formas possíveis de joins, enfim, entender como funciona a linguagem SQL. Não digo dominar tudo, até porque só isso tomaria vários anos de estudo, mas pelo menos o básico de como cada uma delas funciona.
3 - Entender como usar essas queries à partir de um client(no seu caso, o Visual Basic). Não somente concatenar strings, entender as ferramentas que a tecnologia disponibiliza para você, que no caso, é o ADO

Aprenda a fazer as queries em um editor de queries, faça as queries conforme precisa e então transfira essas queries para o seu client. é esse o caminho mais simples à ser seguido. Pelo que vi, você está fazendo o contrário, primeiro usando as queries no client e depois tentando entender como elas funcionam...
POCE1DON 29/07/2016 00:58:37
#465249
Certo Kerplunk, entendo seu ponto de vista, pelo jeito meu histórico passou uma imagem bem
ruim do que sei da programação

Minha dúvida de hj foi referente à um recurso que o VB6 tem e é muito usado mas
que existe um [ô]bug[ô] que não vi acontecer, no pouco que olhei, em .NET.

Meu aprendizado no SQL está como todo iniciante, havendo dúvidas e em busca do
esclarecimento e solução, mas uma coisa tenho que concordar com vc, não estou [ô]focando[ô],
tudo que sei hj é baseado em buscas [ô]auto-didatas[ô]. Não ter o acompanhamento de um profissional
é bem complicado pra aprofundar nesse mundo complexo da programação, a internet passa muito pra
gente, mas nem sempre conseguimos o aprendizado [ô]focado[ô] naquela correta sequencia, como vc
mencionou.

Já sua dica da montagem das queries, faço todas em um editor (RazorSQL), foi o melhor do já
usei.

Você tem outras fontes de materiais que vão me ajudar? ... sei lá, já tenho muita coisa, mas nunca é de mais.
KERPLUNK 29/07/2016 03:31:34
#465250
Eu entendi sua dúvida. O que você quer é condicionar um determinado valor na sua query, dependendo se alguma textbox contém ou não valor.
Algo como:

cmd.Execute [Ô]Insert into tabela (campo1, campo2) values([ô][Ô] + txtCampo1.Text + [Ô][ô], [Ô] + iif(txtCampo2.Text=[Ô][Ô], [Ô]null[Ô], [Ô][ô][Ô] + txtCampo2.Text + [Ô][ô][Ô] + [Ô])[Ô]

Isso vai inserir um registro com o campo2 como null caso o textbox txtCampo2 não contenha um texto.

O que aconselho é o uso de parâmetros, como no link que passei, eles fazem essa [Ô]massaroca[Ô] de string concatenada ficar muito mais compreensível:

Dim Cmd As New ADODB.Command
With Cmd
.CommandText = [Ô]Insert Into Tabela(Campo1, Campo2) Values (?, ?)[Ô]
.CommandType = adCmdText
.CommandTimeout = 15
End With
Cmd.Parameters(0).Value = txtCampo1.Text
If txtCampo2.Text = [Ô][Ô] Then
Cmd.Parameters(1).Value = Nothing
Else
Cmd.Parameters(1).Value = txtCampo2.Text
End If


Veja que o tratamento para o campo estar vazio, pode até mesmo conter uma caixa de mensagem avisando o que vai acontecer, o código fica mais limpo e a depuração muito mais fácil. Além de praticamente anular uma falha de segurança gigantesca que se chama [Ô]SQL Injection[Ô].
POCE1DON 29/07/2016 04:50:33
#465251
kkkkkk [Ô]massaroca[Ô] foi boa, a muito tempo não lia essa coisa kkkk

obrigado Kerplunk
vou pesquisar mais sobre suas dicas
PERCIFILHO 29/07/2016 07:53:02
#465257
Nosso colega NILTON_VIANNA postou uma dúvida semelhante à sua.
SALVAR DATA NULL
Dá uma olhada e veja se te ajuda.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas