Fórum [Problema resolvido] Data em Branco #363315
28/08/2008
0
Então tive que ir a caça. Encontrei uma solução que caiu como uma luva para mim.
O problema era gravar uma data em branco utilizando Insert e de todos os modos citados, infelizmente não funfaram. Então achei esta solução
Código:
Dm.SQLDataSet6.ParamByName(´dtEnt´).DataType := FtDate;
Quando for passar parametro para um SqlDataSet utilizo o tipo DataType e o valor correspondente FTDate.
Há não se esqueça de declarar a uses DB ok
Com isto ele vai gravar no banco de dados (firebird) o valor nul para um capo tipo data.
Isto resolveu meu problema devido que se eu omitisse a data ele grava 31/12/1899. e com este simples comando resolvi meu problema.
Tá ai o problema resolvido e compartilhar com a galera que esta tendo o mesmo problema.
t+
Objetivacreator
Curtir tópico
+ 0Posts
28/08/2008
Marco Salles
http://forum.devmedia.com.br/viewtopic.php?p=316888&highlight=#316888
Sinceramente .... é melhor em termos de performance com o Banco de
Dados , utilizar uma sql onde não tem o parâmetro Data ...
tipo isso:
if (Dm.SQLDataSet5.FieldByName(´DtEntrada´).AsString = ´´) then Sql sem o Parãmtro dtEnt else Sql com o parãmtro dtEnt
além disso , será que
[b:1e6b554f82]Dm.SQLDataSet6.ParamByName(´dtEnt´).DataType := FtDate; [/b:1e6b554f82]
vai funcionar para qualquer Driver e qualquer Banco ????
Gostei + 0
29/08/2008
Objetivacreator
Mesmo estas citações de tratar a data como string, não funcionaram de maneira alguma.
A rotina da data grava uma data como tipo null no banco de dados, caso contrário vai salvar a data correspondente vinda por parâmetro.
No meu caso resolveu, pois analizando outros posts no fórum não obtive retorno e infelizmente alguma luz.
Valeu a todos
Gostei + 0
29/08/2008
Marco Salles
O que eu disse foi o seguinte ...
veja as duas situações
//1)Retita o parãmetro dtEnt DA INSTRUÇÃO sql ... Exatamente devido //a problemas de conversão if (Dm.SQLDataSet5.FieldByName(´DtEntrada´).AsString = ´´) then Dm.SQLDataSet6.CommandText := ´Insert Into Carne´ + ´(NumResumo, Parcela, DtVencimento, Valor_Parcela, Valor_Entrada, CodCliente, DtVenda)´ + ´values(:resumo,:nparc,:dVencto,:vlrParc,:codCli, :dDtVenda)´ //2)Coloca o Parâmetro dtEnt , pq ele vai conter um valor Válido else begin Dm.SQLDataSet6.CommandText := ´Insert Into Carne´ + ´(NumResumo, Parcela, DtVencimento, Valor_Parcela, Valor_Entrada, DtEntrada, CodCliente, DtVenda)´ + ´values(:resumo,:nparc,:dVencto,:vlrParc,:vlrEnt,:dtEnt,:codCli, :dDtVenda)´; Dm.SQLDataSet6.ParamByName(´dtEnt´).AsDate := Dm.SQLDataSet5.FieldByName(´DtEntrada´).AsDateTime; end; //continua com os outros parãmetros
Vc disse que
Sinceramente qnd vi o seu tópico original , pensei que tivesse resolvido ,
pq nã retornou ... < e conveniente continuar o mesmo assunto sempre no mesmo tópico... mesmo que as dicas dos colegas não derem certos >
Agora se voce for usar o
Dm.SQLDataSet6.ParamByName(´dtEnt´).DataType := FtDate;
não precisa ficar SETANDO o SQL dentro do Loop
Tira a Intrução para fora do Laço e so deixa dentro do Laço os valores
que serão atribuidos ao parãmetros ... Tb [u:1f97e53dcb]acredito eu [/u:1f97e53dcb]que não precisa dar um :
Dm.cds_Carne.ApplyUpdates(-1) , pq as Atualizaçoes não estao em cache e ja foram enviadas ....
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)