Nao entendo esse erro
Tenho essa instrucao SQL abaixo, ela funciona bem na primeira pesquisa, mas se eu repetir a mesma pesquisa logo em seguida, resulta no seguinte erro: ´NO VALUE FOR PARAMETER ´DATINI´. Process Stopped
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
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
Curtidas 0
Respostas
Osocram
03/07/2009
Amigo... eu não vi nada de errado ae não.
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.
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.
Tenho essa instrucao SQL abaixo, ela funciona bem na primeira pesquisa, mas se eu repetir a mesma pesquisa logo em seguida, resulta no seguinte erro: ´NO VALUE FOR PARAMETER ´DATINI´. Process Stopped
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
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
Lightshine
03/07/2009
Tenta o seguinte:
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.
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
Osocram
03/07/2009
Se não me engano o Pedidos.EmptyDataset; serve apenas se vc usa cds local, quero dizer CreateDataSet.
Tenta o seguinte:
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
Lightshine
03/07/2009
Se não me engano o Pedidos.EmptyDataset; serve apenas se vc usa cds local, quero dizer CreateDataSet.
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
Felipeiw
03/07/2009
Ja testei todas essas opcoes e nao resolveu, mas digo a vcs o seguinte, esse erro acontece somente quando na consulta passo variaveis por parametro e tambem concatenando na string. Se eu passar todas as variaveis, neste caso o xcodint,xdatini,xdatfin por parametros o erro nao acorre.
Abs
Abs
GOSTEI 0
Discorpio
03/07/2009
Boa noite a todos.
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.
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:
Pedidos.Params.ParamByName(´DATINI´).[color=blue:9c87c58ae4]AsDateTime[/color:9c87c58ae4] := EDatini.DateValue;
Pedidos.Params.ParamByName(´DATFIN´).[color=blue:9c87c58ae4]AsDateTime[/color:9c87c58ae4] := EDatfin.DateValue;
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
Felipeiw
03/07/2009
Eu utilizo um componente de data do Elevaldo, otimo digo de passagem. Todos os componentes dele sao mt bons.
Abs
Abs
GOSTEI 0
Vitor Rubio
03/07/2009
o que é essa variável xinterno que você concatena?
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.
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
Felipeiw
03/07/2009
xinterno é um codigo interno do produto, ora terei que pesquisar por esse campo, ora terei que pesquisar por outro campo, dependendo das escolhas do usuario, mas sempre dentro de um periodo, entao para eu nao ficar montando pesquisas diversas, porque as combinacoes podem variar demais, vou concatenando os campos escolhidos e seus valores que estao nessas variavies (x, alguma coisa).
Abs
Abs
GOSTEI 0