Ir para conteúdo

POWERED BY:

Arquivado

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

André Bortolotto

Problema ao fechar uma query

Recommended Posts

Bom dia,Tenho em um form uma Zquery onde passo 2 parametros. Na primeira vez passa normalmente, mas na segunda vez da erro ao passar pela mesma query "ZQ_TipoMovFat: Cannot perform this operation on a closed dataset".Quando passa pelo close do dataset, da o erro acima. Já tentei um monte de coisa diferente e até agora nada... Alguem tem alguma idéia?No código, fiz o seguinte:if DS_TipoMovFat.DataSet.Active then DS_TipoMovFat.DataSet.Close;DS_TipoMovFat.DataSet.Open;procedure TfrmPesqMovimentacao.ZR_TipoMovFatBeforeOpen(DataSet: TDataSet);begin ZQ_TipoMovFat.ParamByName('PEMP_ID').AsInteger := empresa; ZQ_TipoMovFat.ParamByName('PTPM_COD').AsString := tipomov;end;Abraços!André Bortolotto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente alterando um pouco seu fonte e fazendo assim:

 

procedure TfrmPesqMovimentacao.ZR_TipoMovFatBeforeOpen(DataSet: TDataSet);beginDS_TipoMovFat.DataSet.Close;ZQ_TipoMovFat.ParamByName('PEMP_ID').AsInteger := empresa;ZQ_TipoMovFat.ParamByName('PTPM_COD').AsString := tipomov;DS_TipoMovFat.DataSet.Open;end;

Ou seja, sempre fecha a query, passa os parâmetros e abre novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Marcio,Já tentei fazer isso onde eu chamo a query, mas acontece que acontece o erro quando passa pelo close. Na primeira passa certinho e executa a query, já na segunda vez, da o erro no CLOSE. Nunca tinha visto isso...Já tentei até tirar o close e passar os parametros e abrir, mas ai não acontece nada e a query não é executada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Altere, dê o close e open sobre a query mesmo.

 

procedure TfrmPesqMovimentacao.ZR_TipoMovFatBeforeOpen(DataSet: TDataSet);beginZQ_TipoMovFat.Close;ZQ_TipoMovFat.ParamByName('PEMP_ID').AsInteger := empresa;ZQ_TipoMovFat.ParamByName('PTPM_COD').AsString := tipomov;ZQ_TipoMovFat.Open;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não entendo mais a sua situação, se quer atualizar, é preciso refazer a consulta, no caso fechar e abrir para buscar, pode tentar usar o query.Refresh, mas pelo visto você sempre precisa repassar as informações, poderia dar mais detalhes de como gostaria que funcionasse ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Marcio, na query que passei tem um parametro "tipomov" que muda constantemente dependendo da onde o usuario está. Por isso que preciso executar ela toda hora, se não fica valor antigo na tela e o usuario acaba faturando o movimento para o lugar errado.Até já tentei o refresh, mas ai não executa a query.O select que uso é este aqui abaixo:SELECT T.TPM_COD, T.TPM_DESCRICAO, F.FTM_DEFAULT FROM MV_FLUXO_TIPOMOV F JOIN MV_TIPOSMOVIMENTOS T ON (T.EMP_ID=F.EMP_ID AND T.TPM_COD=F.FTM_TPMCODDESTINO) WHERE F.EMP_ID=:PEMP_ID AND F.FTM_TPMCODORIGEM=:PTPM_CODNão sei mais como resolver isso... to pensando em outra forma de fazer o processo, mas não vem nada na minha cabeça. É complicado eu tentar explicar como funciona o processo, pois é meio longo, mas se quiser, posso tentarAbraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Marcio, na query que passei tem um parametro "tipomov" que muda constantemente dependendo da onde o usuario está. Por isso que preciso executar ela toda hora, se não fica valor antigo na tela e o usuario acaba faturando o movimento para o lugar errado.Até já tentei o refresh, mas ai não executa a query.O select que uso é este aqui abaixo:SELECT T.TPM_COD, T.TPM_DESCRICAO, F.FTM_DEFAULT FROM MV_FLUXO_TIPOMOV F JOIN MV_TIPOSMOVIMENTOS T ON (T.EMP_ID=F.EMP_ID AND T.TPM_COD=F.FTM_TPMCODDESTINO) WHERE F.EMP_ID=:PEMP_ID AND F.FTM_TPMCODORIGEM=:PTPM_CODNão sei mais como resolver isso... to pensando em outra forma de fazer o processo, mas não vem nada na minha cabeça. É complicado eu tentar explicar como funciona o processo, pois é meio longo, mas se quiser, posso tentarAbraços!

Caro você já tentou usar a query com comandos SQL? vai um exemplo que estou usando muito. Principal.CustoMP.close; Principal.CustoMP.SQL.Clear; Principal.CustoMP.SQL.Add('select * '); Principal.CustoMP.SQL.Add('from Cust_M_Prima'); Principal.CustoMP.SQL.Add('Where Cad_CM_Planta =:Plant and Cad_CM_Economics =:Economic'); Principal.CustoMP.ParamByName('Plant').AsString := Principal.DSPecas.DataSet.FieldByName('Planta').AsString; Principal.CustoMP.ParamByName('Economic').AsString := EcoMP; Principal.CustoMP.Prepare; Principal.CustoMP.Open;principal - FormularioPlant - é um parametro de entrada ( campo)Economics - é outro campoExiste situações que uso 6 variaveis de pesquisa na tabela, parei de usar até os relacionamentos do SQL

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.