Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Query Auxiliar Dando Pau


Guest --felipe --

Pergunta

Guest --felipe --

e ai pessoal

estou com um problema que eu não consigo entender..

eu uso IBQuerys auxiliares com SQL em branco, e de acordo com minha necessidade adiciono SQL (apenas para visualização) em meu programa

só que está dando problema..

neste caso eu uso a query auxiliar para verificar quais FEEDERS da maquina(idmaq) 1 estão sem componente(idcomp).

e então adiciono eles em um combobox no form de cadastro(CadFeederForm)

este SERIA o codigo correto:

s:='select * from feedercomp'+
     ' where idcomp is null'+
     ' and idmaq = 1'+
     ' order by feeder';
  dm.auxQuery.Close;
  dm.auxquery.sql.clear;
  dm.auxquery.sql.add(s);
  dm.auxquery.Open;//O ERRO ACONTECE AQUI(não mostra a linha, descobri-lo usando pontos de interrupção)
  dm.auxquery.last;
  dm.auxquery.first;
  CadFeederForm := TCadFeederForm.Create(nil);
  for linha := 0 to dm.auxQuery.RecordCount - 1 do
  begin
    for coluna := 1 to dm.auxQuery.FieldCount do
    begin
      if dm.auxQuery.Fields[coluna-1].DisplayLabel = 'FEEDER' then begin
        CadFeederForm.ComboBox1.Items.Add(dm.auxQuery.Fields[coluna - 1].AsString);
      end;
    end;
    dm.auxQuery.Next;
  end;
  dm.auxquery.close;
  CadFeederForm.ShowModal;
  CadFeederForm.Free;
o problema é que esta mesma auxquery também é usada em outro form para outra tabela(GARRA), e em outros forms também ai quando é aberta(dm.auxquery.open) mostra o seguinte erro: "Project CEC.exe raised exception class EDatabaseError with message 'DBEdit5: Field 'GARRA' not found'. Process stopped. ....." a merda é que não tem nada de GARRA nesta tabela, e nem DBEdit5 no form de cadastro de feeder então eu criei outra query auxiliar(aux2query):
s:='select * from feedercomp'+
     ' where idcomp is null'+
     ' and idmaq = 1'+
     ' order by feeder';
  dm.aux2Query.Close;
  dm.aux2query.sql.clear;
  dm.aux2query.sql.add(s);
  dm.aux2query.Open;//Não acontece mais erro
  dm.aux2query.last;
  dm.aux2query.first;
  CadFeederForm := TCadFeederForm.Create(nil);
  for linha := 0 to dm.aux2Query.RecordCount - 1 do
  begin
    for coluna := 1 to dm.aux2Query.FieldCount do
    begin
      if dm.aux2Query.Fields[coluna-1].DisplayLabel = 'FEEDER' then begin
        CadFeederForm.ComboBox1.Items.Add(dm.aux2Query.Fields[coluna - 1].AsString);
      end;
    end;
    dm.aux2Query.Next;
  end;
  dm.aux2query.close;
  CadFeederForm.ShowModal;
  CadFeederForm.Free;

e assim funcionou direitinho, notem que eu só mudei a query.

agradeço desde já!

abraços

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
o problema é que esta mesma auxquery também é usada em outro form para outra tabela(GARRA), e em outros forms também

ai quando é aberta(dm.auxquery.open) mostra o seguinte erro:

"Project CEC.exe raised exception class EDatabaseError with message 'DBEdit5: Field 'GARRA' not found'. Process stopped. ....."

a merda é que não tem nada de GARRA nesta tabela, e nem DBEdit5 no form de cadastro de feeder

Está aí uma coisa que não entendo...

Para quê economizar componente, criar situações como esta, se o incremento no programa executável é quase despresível se comparado ao todo?

Então, seria melho não utilizar componentes data-aware, mas sim edit's e mover todos os valores na mão.

"Project CEC.exe raised exception class EDatabaseError with message 'DBEdit5: Field 'GARRA' not found'. Process stopped. ....."

a merda é que não tem nada de GARRA nesta tabela, e nem DBEdit5 no form de cadastro de feeder

o fato de você utilizar a mesma consulta em mais que um formulário e puxando campos de tabelas diferentes é suficiente para esse erro ocorrer!!!

Só funcionaria se cada form existisse sozinho. Se os dois estão criados, um deles ligado ao datasource deste dataset comum (sua query) recebendo o campo da tabela1 e o outro form, utilizando outro datasource, mas apontando para o mesmo dataset (sua query) está referenciando um campo da tabela2. Ao abrir uma das consultas é claro que o campo de um dos forms não vai existir e terá este tipo de erro.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --felipe --
Só funcionaria se cada form existisse sozinho. Se os dois estão criados, um deles ligado ao datasource deste dataset comum (sua query) recebendo o campo da tabela1 e o outro form, utilizando outro datasource, mas apontando para o mesmo dataset (sua query) está referenciando um campo da tabela2. Ao abrir uma das consultas é claro que o campo de um dos forms não vai existir e terá este tipo de erro.

Abraços

humm agora clareou, nem passava pela minha cabeça que ele buscaria um campo de outro form devido ao datasource, já que só haviam 2 forms abertos

eu achava que era necessario limpar a memoria da query ou alguma coisa do tipo :P

Está aí uma coisa que não entendo...

Para quê economizar componente, criar situações como esta, se o incremento no programa executável é quase despresível se comparado ao todo?

é verdade, o jeito é não economizar desde que o programa funcione certinho

valeu pelas dicas :lol:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...