Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Aprendizporumavida

[Resolvido] Passando data como parametro

Recommended Posts

Olá pessoal, estou com um problema em uma consulta pelo delphi, ao realizar diretamente no banco de dados eu consigo..me retorna os dados corretos, utilizando o seguinte script

Select M.XNF, M.XCD_INT_NF, M.XCD_INT_FORNECEDOR, M.XDT, M. XDT_EMISSAO,

M. XESPECIE, M.XSERIE, F.XRAZAO, M.XOBS, M.XVALOR_CONTABIL, M.XEMITENTE

FROM tb_mov_entrada M

INNER JOIN TB_FORNECEDORES F ON M.XCD_INT_FORNECEDOR = F.XCD_INT_FORNECEDOR

where M.XDT = '2007-11-02'

//

 

Mas já dentro do delphi utilizo este que é basicamente a cópia, exceto pelos parametros, quando tento passar como parametro, esta dando o erro invalid precison value

 

 

procedure TfrmEntrada.pPesquisaDetalhada;

var

vData: TDate;

vPData: string;

begin

with qryEntradaView do

begin

SQL.Clear;

SQL.Add(' Select M.XNF, M.XCD_INT_NF, M.XCD_INT_FORNECEDOR, M.XDT, M. XDT_EMISSAO, ');

SQL.Add(' M. XESPECIE, M.XSERIE, F.XRAZAO, M.XOBS, M.XVALOR_CONTABIL, M.XEMITENTE ');

SQL.Add(' FROM tb_mov_entrada M ');

SQL.Add(' INNER JOIN TB_FORNECEDORES F ON M.XCD_INT_FORNECEDOR = F.XCD_INT_FORNECEDOR ');

 

if edtDtNf.Text <> '' then

begin

vData := StrToDate(edtDtNf.Text);

vPData := FormatdateTime('mm"-"dd"-"yyyy', vData);

SQL.Add(' Where M.XDT = :XDT');

Parameters.ParamByName('XDT').Value := (vPData);

end;

open;

end;

 

Obs: as variáveis vData e vPdata já tentei formatar em vários formatos incluisive no formato do banco que utilizo, mas mesmo assim nada.

Se alguem puder me dar um help, obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode tentar passar diretamente, já que esta formatando a data...

 

procedure TfrmEntrada.pPesquisaDetalhada;
begin
with qryEntradaView do
	begin
	SQL.Clear;
	SQL.Add(' Select M.XNF, M.XCD_INT_NF, M.XCD_INT_FORNECEDOR, M.XDT, M. XDT_EMISSAO, ');
	SQL.Add(' M. XESPECIE, M.XSERIE, F.XRAZAO, M.XOBS, M.XVALOR_CONTABIL, M.XEMITENTE ');
	SQL.Add(' FROM tb_mov_entrada M ');
	SQL.Add(' INNER JOIN TB_FORNECEDORES F ON M.XCD_INT_FORNECEDOR = F.XCD_INT_FORNECEDOR ');
	if edtDtNf.Text <> '' then
		SQL.Add(' Where M.XDT = ''' + FormatdateTime('mm"-"dd"-"yyyy',StrToDate(edtDtNf.Text)) + '''');
	open;
	end;
end;

Mudei um pouco seu procedimento :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brigadão grande deu certo..a única mudança que fiz foi nesta linha

 

SQL.Add(' Where M.XDT = ''' + FormatdateTime('yyyy"-"mm"-"dd',StrToDate(edtDtNf.Text)) + '''');

 

pois o formato da data no banco que utilizo é desta forma com ano/mes/dia..mas funcionou..brigadão.

 

No entanto ouvi um comentário que não é bom passar direto assim, pois deixa brechas para o usuário ?

Existe preferência por passar por parâmetro ou direto ?

 

Alguem saberia me dizer a real diferença entre passar por parametro ou diretamente ?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza...

Bom, não teria como ter brechas, ao menos que um usuário tentar digitar comandos onde coloca a data, mas muito complicado de fazer algo, tanto passando direto ou com parâmetros o resultado e procedimento é o mesmo, e particularmente acho que deve de ser mais rápido passar direto do que usar parâmetros, visto que o sistema não vai precisar atribuir e usar mais memória para outro processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.