GRAVAR DATA EM BRANCO VISUAL STUDIO2012 X FIREBIRD

LAUROFELIPE 22/04/2013 17:20:27
#422299
Boa tarde.

Tenho um sistema em Visual Sttudio 2012 (windows forms) com banco em Firebird, com uma tabela com 3 campos data (Saida, retorno e faturamento), default null.
No momento da gravação (insert ou update) se uma data não for informada, o que é normal, acusa erro. Já tentei passar um valor nulo, conforme abaixo,

[txt-color=#e80000]EAdaptadorFB.SelectCommand.Parameters.Add([Ô]@DataRetorno[Ô], IIf(mskDataRetorno.Text <> [Ô] / /[Ô], mskDataRetorno.Text, vbNull))[/txt-color]

mas dá erro de conversão.
Já vasculhei por uma solução, mas todas que encontrei apontam para a rotina acima.
Se alguem puder dar-me uma ajuda, agradeço antecipadamente.

Lauro

OMAR2011 22/04/2013 21:38:22
#422319
Fiz um teste aqui deste jeito e deu certo.

Dim con As New OleDbConnection([Ô]Provider=Ibole.provider.v4;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\Delicias.fdb[Ô])
Dim cmd As New OleDbCommand
cmd = con.CreateCommand
con.Open()
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO teste(Cod,Saida,Retorno,Faturamento) VALUES (?,?,?,?)[Ô]
.Parameters.Add([Ô]@cod[Ô], OleDbType.Integer)
.Parameters([Ô]@cod[Ô]).Value = TextBox1.Text

.Parameters.Add([Ô]@Saida[Ô], OleDbType.Date)
.Parameters([Ô]@Saida[Ô]).Value = IIf(IsDate(TextBox2.Text) = False, DBNull.Value, Format(TextBox2.Text, DateFormat.ShortDate))

.Parameters.Add([Ô]@Retorno[Ô], OleDbType.Date)
.Parameters([Ô]@Retorno[Ô]).Value = IIf(IsDate(TextBox3.Text) = False, DBNull.Value, Format(TextBox3.Text, DateFormat.ShortDate))

.Parameters.Add([Ô]@Faturamento[Ô], OleDbType.Date)
.Parameters([Ô]@Faturamento[Ô]).Value = IIf(IsDate(TextBox4.Text) = False, DBNull.Value, Format(TextBox4.Text, DateFormat.ShortDate))
.ExecuteNonQuery()
MsgBox([Ô]Gravado![Ô])
End With
con.Close()
LAUROFELIPE 22/04/2013 22:32:23
#422321
Boa noite Omar.

Fiz ajustes conforme seu exemplo e embora pareça que funcionou, pelo menos não recebi mensagem de erro de data, acabei recebendo outra mensagem de erro -> [txt-color=#e80000]Erro de inclusão: Cadeia de entrada não estava em um formato incorreto[/txt-color]. <-.
Já tentei descobrir qual parâmetro esta causando o erro, acessando ex.mensagem, mas devo confessar que fiquei perdido com tantos parâmetros e nehum indicativo.
Estou apanhando um bocado.

Grato
OMAR2011 23/04/2013 17:49:01
#422388
Coloque o código para verificar
onde está dando erro.
LAUROFELIPE 23/04/2013 19:47:11
#422398
Como estou dando INSERT a partir de um datagrid, resolvi fazer pelo lado mais chato.
A partir do zero, a cada rodada, incluia e tratava um campo, aí apareceram alguns pingos que aos poucos estou enxugando.
Claro que seria mais rápido que, a partir da mensagem de erro, soubesse identificar qual atributo esta não conforme, mas...
Valeu pela dica do dbnull.value. Estava tentando utilizar vbnull somente.

Grato

Lauro
FELLIPEASSIS 23/04/2013 22:32:28
#422408
propriedade[Ô] textmaskformat[Ô] para [Ô]includeliterals[Ô] do maskedtextbox

cmd.Parameters.AddWithValue([Ô]@c_datanasc[Ô], CDate(maskDataNasc.Text))

eu faço assim
Faça seu login para responder