GRAVAR DATA EM BRANCO VISUAL STUDIO2012 X FIREBIRD
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
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
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()
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()
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
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
Coloque o código para verificar
onde está dando erro.
onde está dando erro.
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
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
propriedade[Ô] textmaskformat[Ô] para [Ô]includeliterals[Ô] do maskedtextbox
cmd.Parameters.AddWithValue([Ô]@c_datanasc[Ô], CDate(maskDataNasc.Text))
eu faço assim
cmd.Parameters.AddWithValue([Ô]@c_datanasc[Ô], CDate(maskDataNasc.Text))
eu faço assim
Faça seu login para responder