Fórum Nao entendo esse erro #371953
03/07/2009
0
Pedidos.Close; Pedidos.CommandText := ´SELECT B.CODIGO, C.NOME, C.INTERNO ´+ ´FROM PEDIDOS A, ITENS B, PRODUTOS C ´+ ´WHERE A.NUMIDE = B.NUMIDE AND B.CODIGO = C.CODIGO AND C.INTERNO LIKE ´+QuotedStr(xinterno)+´ AND A.DATA BETWEEN :DATINI AND :DATFIN´; Pedidos.Params.ParamByName(´DATINI´).AsDate := EDatini.DateValue; Pedidos.Params.ParamByName(´DATFIN´).AsDate := EDatfin.DateValue; Pedidos.Open;
Eu poderia passar a variavel xinterno por parametro, esse é um exemplo simples, na verdade o que eu vou precisar é montar uma string que ira variar conforme as varias opcoes de escolha que o usuario ira ter para montar o relatorio, a unica variavel fixa é o periodo, agora se ele quer filtrar por vendedor ou listar todos, quer escolher o produto ou todos, com todas essas opcoes eu monto uma string contendo a instrucao SQL e passo para a consulta, mas percebi que quando estou passando o periodo por parametro retorna o erro descrito, por favor alquem pode me ajudar com isso.
Mt Obrigado
Felipeiw
Curtir tópico
+ 0Posts
03/07/2009
Osocram
talvez vc tenha algum evento que esteja apagando o DatIni
tenta dar um showmessage do valor do DatIni antes do close;
para ter certeza que ele tem valor;
e tbm se não me engano tem um comando p limpar os parametros...
Pedidos.Params.Clear se não me engano.
Pedidos.Close; Pedidos.CommandText := ´SELECT B.CODIGO, C.NOME, C.INTERNO ´+ ´FROM PEDIDOS A, ITENS B, PRODUTOS C ´+ ´WHERE A.NUMIDE = B.NUMIDE AND B.CODIGO = C.CODIGO AND C.INTERNO LIKE ´+QuotedStr(xinterno)+´ AND A.DATA BETWEEN :DATINI AND :DATFIN´; Pedidos.Params.ParamByName(´DATINI´).AsDate := EDatini.DateValue; Pedidos.Params.ParamByName(´DATFIN´).AsDate := EDatfin.DateValue; Pedidos.Open;
Gostei + 0
03/07/2009
Lightshine
Pedidos.EmptyDataset;
Pedidos.Close;
Pedidos.CommandText := ´SELECT B.CODIGO, C.NOME, C.INTERNO ´+
´FROM PEDIDOS A, ITENS B, PRODUTOS C ´+
´WHERE A.NUMIDE = B.NUMIDE AND B.CODIGO = C.CODIGO AND C.INTERNO LIKE ´+QuotedStr(xinterno)+´ AND A.DATA BETWEEN :DATINI AND :DATFIN´;
Pedidos.Params.ParamByName(´DATINI´).AsDate := EDatini.DateValue;
Pedidos.Params.ParamByName(´DATFIN´).AsDate := EDatfin.DateValue;
Pedidos.Open;
Espero ter ajudado.
Lightshine.
Gostei + 0
03/07/2009
Osocram
Gostei + 0
03/07/2009
Lightshine
Se eu estiver enganada por favor me corrija, mas o EmptyDataset serve para limpar da memoria o cachê do ClientDataset.
Como o erro ocorre quando ele executa a consulta pela segunda vez, acredito que o erro pode ser por conflitos entre a nova consulta e os dados que estão armazenados no cachê do clientdataset já que ele altera os parametros a serem consultados, uma hora pode ser por vendedor, outra por produtos, ou por qualquer uma das opções que há no formulário da aplicação dele.
Lightshine
Gostei + 0
03/07/2009
Felipeiw
Abs
Gostei + 0
03/07/2009
Discorpio
Acredito que o erro acontece na conversão de datas.
Se o ´EDatini´ e o EDatfin´, for um componente ´DateTimePicker´ ou um ´MonthCalendar´, possa ser que o seu método DateValue esteja retornando a data no tipo DateTime e não tão somente Date, então os parâmetros tem que ser convertidos assim:
Outra coisa, se voce fizer a pesquisa com os EDatiniDateValue com valor nulo, o erro poderá ocorrer também não é, neste caso sugiro que voce faça uma regra de validação em caso do usuário não escolher ou digitar as datas para os parâmetros.
Gostei + 0
04/07/2009
Felipeiw
Abs
Gostei + 0
06/07/2009
Vitor Rubio
o valor dela não é mudado quando você clica no botão para fazer a consulta. Veja o valor dela na segunda consulta. Use o debugger do delphi passo a passo.
Essa variável é string? Ele não fica com nenhuma aspa ´´sobrando´´´ quando você usa o quotedstr?
se estiver usando clientdataset, tente colocar os parametros no seu sqldataset e a query também no sqldataset e não usar o commandtext do clientdataset.
Gostei + 0
08/07/2009
Felipeiw
Abs
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)