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

Instrução Sql não mostra dados em condição


robinhocne

Pergunta

Estou fazendo uma consulta para a grade horario minha, mas quando ele passa por aqui:

if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then
 .......
quando ele passa e o Bloqueado é 1 ele me mostra, mas quando é 0 ele não retorna nada.
for x:=1 to 16 do
   begin
      for y:=1 to 7 do
      begin
        z:=z+1;
        if TpsvBorderLabel(FindComponent( 'Hor' + IntToStr( x ) ) ).Caption<>'' then
         begin
          QryAgenda.close;
          QryAgenda.sql.Clear;
          QryAgenda.sql.Add('Select * From Praticas where Instrutor = :Inst and data = :PDATA and horario = :PHORARIO');
          QryAgenda.ParamByName('Inst').AsString   := txtcodins.Text;
          QryAgenda.ParamByName('Pdata').AsDate    := StrtoDate(TPanel(FindComponent('Pan' + IntToStr( y ) ) ).Caption);
          QryAgenda.ParamByName('Phorario').AsTime := StrToTime(TpsvBorderLabel(FindComponent( 'Hor' + IntToStr( x ) ) ).Caption);
          QryAgenda.open;
         end;

          while ( not QryAgenda.Eof) do
          begin
            if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then
              begin
                TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= '**********';
              end
              else
              begin
                TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= StrZero(QryAgenda.fieldByName('Aluno').AsInteger,6);
                TEdit( FindComponent( 'Ct' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= QryAgenda.fieldByName('Categoria').AsString;
              end;
            QryAgenda.Next;
          end;
      end;
   end;

Já fiz o Debug e vi que não mostra nada mesmo, mas por que será ?????

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

robinhocne, tá meio estranho a parte do "while ( not QryAgenda.Eof) do". Se houver mais que uma linha retornada pela query, e em uma delas o tal Bloqueado é 0 e em outro é 1, o valor no seu componente edit será sobrescrito porque, dentro do loop, tanto y quanto z não são alterados a cada interação. Veja se não é por conta de uma situação como esta que você não está vendo a alteração (debug - ponha um break para quando for 0).

Abraços

p.s. você pode editar seu post e por o "]" que falta no primeiro "[code", assim fica melhor a visualização do seu código.

Link para o comentário
Compartilhar em outros sites

  • 0
robinhocne, tá meio estranho a parte do "while ( not QryAgenda.Eof) do". Se houver mais que uma linha retornada pela query, e em uma delas o tal Bloqueado é 0 e em outro é 1, o valor no seu componente edit será sobrescrito porque, dentro do loop, tanto y quanto z não são alterados a cada interação. Veja se não é por conta de uma situação como esta que você não está vendo a alteração (debug - ponha um break para quando for 0).

Abraços

p.s. você pode editar seu post e por o "]" que falta no primeiro "[code", assim fica melhor a visualização do seu código.

Mas ele não me retorna, mais linhas na query, pois o Horario marcado é unico e data tbém e tenho validações para que não deixe o usuario marcar em horarios e dias iguais, pois na posição x ele percorre 7 vezes que são os dias da semana e na posição y ele percorre 16 vezes para rodar cada horario.

Então ai ele só pega uma vez o horario daquele dia e verifica e assim por diante.

Link para o comentário
Compartilhar em outros sites

  • 0
Mas ele não me retorna, mais linhas na query, pois o Horario marcado é unico e data tbém e tenho validações para que não deixe o usuario marcar em horarios e dias iguais, pois na posição x ele percorre 7 vezes que são os dias da semana e na posição y ele percorre 16 vezes para rodar cada horario.

Então ai ele só pega uma vez o horario daquele dia e verifica e assim por diante.

robinhocne, nesta caso faça o mais lógico que seria simplesmente perguntar se não é fim do arquivo (caso em que a consulta seria nula) para então fazer as atribuições - não tem porque utilizar um while:

...
          if not QryAgenda.Eof then
          begin
            if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then
              begin
                TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= '**********';
              end
              else
              begin
                TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= StrZero(QryAgenda.fieldByName('Aluno').AsInteger,6);
                TEdit( FindComponent( 'Ct' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= QryAgenda.fieldByName('Categoria').AsString;
              end;
          end;
...

e como você executa a consulta (query) apenas na condição: if TpsvBorderLabel(FindComponent( 'Hor' + ... then, a alteração acima deverá ser colocada dentro do bloco begin...end deste if porque, eventualmente, pode ocorrer de você numa passagem ter aberto a consulta e numa próxima passagem, ao não validar o primeiro if, passar para o próximo (do código acima) com a consulta aberta e executar o procedimento incorretamente.

Quanto a pesquisar o erro, sugiro que você ponha um break na atribuição que ocorre quando Bloqueado deveria retornar 0 - se nem sequer parar no break, é sinal de que sua consulta não está retornando este valor. Voce vai precisar achar uma pista do problema porque, aparentemente não há algo visivelmente errado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Mas ele não me retorna, mais linhas na query, pois o Horario marcado é unico e data tbém e tenho validações para que não deixe o usuario marcar em horarios e dias iguais, pois na posição x ele percorre 7 vezes que são os dias da semana e na posição y ele percorre 16 vezes para rodar cada horario.

Então ai ele só pega uma vez o horario daquele dia e verifica e assim por diante.

robinhocne, nesta caso faça o mais lógico que seria simplesmente perguntar se não é fim do arquivo (caso em que a consulta seria nula) para então fazer as atribuições - não tem porque utilizar um while:

...
          if not QryAgenda.Eof then
          begin
            if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then
              begin
                TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= '**********';
              end
              else
              begin
                TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= StrZero(QryAgenda.fieldByName('Aluno').AsInteger,6);
                TEdit( FindComponent( 'Ct' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= QryAgenda.fieldByName('Categoria').AsString;
              end;
          end;
...

e como você executa a consulta (query) apenas na condição: if TpsvBorderLabel(FindComponent( 'Hor' + ... then, a alteração acima deverá ser colocada dentro do bloco begin...end deste if porque, eventualmente, pode ocorrer de você numa passagem ter aberto a consulta e numa próxima passagem, ao não validar o primeiro if, passar para o próximo (do código acima) com a consulta aberta e executar o procedimento incorretamente.

Quanto a pesquisar o erro, sugiro que você ponha um break na atribuição que ocorre quando Bloqueado deveria retornar 0 - se nem sequer parar no break, é sinal de que sua consulta não está retornando este valor. Voce vai precisar achar uma pista do problema porque, aparentemente não há algo visivelmente errado.

Abraços

Coloquei da maneira que você me passou, pesquisei bastante e até fiz para que quando eu marcasse como bloqueado ele gravaria dessa maneira (***********) em um campo da tabela no banco de dados e para eu retornar o que tinha gravado, mas não adiantou nada, continua a mesma coisa!

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,2k
×
×
  • Criar Novo...