[Problema resolvido] Data em Branco

Delphi

28/08/2008

Bom galera, apesar de toda ajuda, não foi possivel resolver por aqui,
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

Objetivacreator

Curtidas 0

Respostas

Marco Salles

Marco Salles

28/08/2008

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


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
Objetivacreator

Objetivacreator

28/08/2008

Bom, deixei bem claro que é para com o firebird.

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
Marco Salles

Marco Salles

28/08/2008

Vamos por partes ...

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
´infelizmente alguma luz´


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
POSTAR