ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Erro ao fazer um laco com If e Then
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 3:36 pm    Assunto: Erro ao fazer um laco com If e Then Responder com Citação

Galera, estou tentando fazer o seguinte:
Ao clicar no botao da mesa estou guardando o numero da mesa numa variavel publica, e depois, abro um Painel onde coloco o Codigo do Garcom e sua senha, caso, esteja cadastrado, quero percorrer os registros da tabela MESAS e encontrar o registro correspondente, e no campo OCUPADO, se estiver marcado com N de nao, quero colocar S de sim e mudar a cor do CAPTION do Botao para vermelho.
Usei o seguinte código, mas nao deu certo. O sistema trava toda vez. O que pode esta errado. Alguem me de uma forca , por favor.

With tblMesas Do
Begin
tblMesas.First;
While not tblMesas.Eof Do
if not tblMesas.Locate('Codigo', CodMesa, []) then
Begin
tblMesas.Edit;
tblMesasOcupada.Value:= 'S';
BtnMesa8.caption.colorc := clRed;
end else
ShowMessage('Numero da Mesa Inválido');
End;
tblMesas.Next;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 4:00 pm    Assunto: Responder com Citação

Galera, só corrigindo, nao é If not Locate e sim if Locate..., foi erro de digitacao
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 4:39 pm    Assunto: Responder com Citação

Senhores, estou precisando muito dessa forca, por favor, me ajudem.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cyberdisk
Colaborador
Colaborador


Registrado: Domingo, 4 de Julho de 2010
Mensagens: 2391
Localização: São José dos Campos - SP

MensagemEnviada: Dom Mai 26, 2013 4:48 pm    Assunto: Responder com Citação

ao usar um comando locate, se o registro não for encontrado, o ponteiro do registro ira para o fim da tabela ... consequentemente o seu while finaliza

para cada locate de um comando first na tabela, para posicionar o registro no inicio da tabela novamente para fazer a pesquisa

atente para os comandos

tblMesas.First;

While not tblMesas.Eof Do

if not tblMesas.Locate('Codigo', CodMesa, []) then


abraço
_________________
O conhecimento abre muitas portas
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 5:34 pm    Assunto: Responder com Citação

Amigo, me perdoe a ignorancia, mas nao entendi. O meu código está igual a esse que vc colocou, nao? Qual seria a forma correta de fazer isso? Voce poderia mandar o código?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
cyberdisk
Colaborador
Colaborador


Registrado: Domingo, 4 de Julho de 2010
Mensagens: 2391
Localização: São José dos Campos - SP

MensagemEnviada: Dom Mai 26, 2013 5:54 pm    Assunto: Responder com Citação

falei para atentar para o código por que esta incorreto
Código:

With tblMesas Do
Begin

While not tblMesas.Eof Do
begin

  tblMesas.First;

  if tblMesas.Locate('Codigo', CodMesa, []) then
    Begin
      tblMesas.Edit;
      tblMesasOcupada.Value:= 'S';
      BtnMesa8.caption.colorc := clRed;
    end else
    ShowMessage('Numero da Mesa Inválido');
end;

   tblMesas.Next;

end;


use o debug do delphi ( break point ) para acompanhar a execução do código

abraço
_________________
O conhecimento abre muitas portas
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 6:00 pm    Assunto: Responder com Citação

Bem, agradeco a ajuda, mas nao estou conseguindo resolver o problema. Na verdade, o sistema nao apresenta erro, compila normalmente. Quando executo F9 é que ele trava. Parece nao sair do laco.
Nao sei como fazer ess laco funcionar. É essa a ajuda que quero. Capturar o numero da mesa que está na variavel MESA e fazer uma busca na tabela mesas, encontrando, verificar se o campo OCUPADA, que é do tipo string está como Sim(s) ou Nao(N), em estando como nao, será preenchido com S e o caption do Botao vai mudar a cor para vermelho.
Como disse, tentei com esse código aí, mas nao tenho a minima nocao de onde está errado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Mai 26, 2013 6:40 pm    Assunto: Responder com Citação

Você deu um Edit para alterar a tabela. E o Post?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 6:41 pm    Assunto: Responder com Citação

Galera, alguem pode me ajudar com esse problema????
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Mai 26, 2013 7:02 pm    Assunto: Responder com Citação

Você tentou colocar o Post depois do Edit?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 7:08 pm    Assunto: Responder com Citação

Batera, me ajude por favor.

O Código tá correto ou nao? Esse next existe? Onde eu coloco o Post?

Mudei o código para o código seguinte, mas nao adiantou. Nao ta acontecendo nada.

While not tblMesas.Eof Do
if tblMesas.Locate('Codigo', Mesa, [LocaseInsensitive, LoPartialKey]) then
Begin
If (tblMesasOcupada.Value = '') or (tblMesasOcupada.Value = 'N') Then
Begin
tblMesas.Edit;
BitBtn8.Font.Color:= clred;
tblMesasOcupada.Value:= 'S';
end else
TblMesas.Cancel;
end;
tblMesas.Post;
end;

o que voce acha?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 7:12 pm    Assunto: Responder com Citação

Batera, esse é o problema que havia te falado há alguns dias. Consegui capturar o numero das mesas, mas agora preciso fazer essas alteracoes conforme o numero, colocar como OCUPADA, mudar a cor do Caption do botao referente a mesa etc.
Entendeu?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 7:50 pm    Assunto: Responder com Citação

Batera, voce poderia me dar uma forca pelo msn ou coisa assim???
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Mai 26, 2013 9:12 pm    Assunto: Responder com Citação

jpmrift, na verdade eu não vi muito sentido em utilizar o while. Se você está utilizando o Locate, então já vai encontrar a mesa que precisa alterar.
Ao menos que eu tenha entendido errado, mas acredito que dá pra fazer dessa forma:
Código:
if tblMesas.Locate('Codigo', Mesa, [LocaseInsensitive, LoPartialKey]) then
begin
  If (tblMesasOcupada.Value = '') or (tblMesasOcupada.Value = 'N') Then
  begin
    BitBtn8.Font.Color:= clred;
    tblMesas.Edit;
    tblMesasOcupada.Value:= 'S';
    tblMesas.Post;
  end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
jpmrift
Novato
Novato


Registrado: Domingo, 7 de Abril de 2013
Mensagens: 43

MensagemEnviada: Dom Mai 26, 2013 10:05 pm    Assunto: Responder com Citação

Batera, consegui resolver. Obrigado.
Mas agora vem aquela dúvida antiga. Cara, tenho um painel com vários botoes (bitbtn), onde seus captions sao por exemplo: MESA 1, MESA2 etc. Coloquei no evento OnClic do Botao a funcao que copia o caption, que será o numero da mesa, e armazeno numa variável. Depois faco as alteracoes conforme o código anterior, tblMesas.First;
if tblMesas.Locate('Codigo', Mesa, [LocaseInsensitive, LoPartialKey]) then
Begin
If (tblMesasOcupada.Value = '') or (tblMesasOcupada.Value = 'N') Then
Begin
tblMesas.Edit;
tblmesasOcupada.Value:= 'S';
tblMesas.Post;
BitBtn8.Font.Color:= clRed;

end;
end;

Altero o Botao colocando sua fonte em vermelho para indicar que a mesa está ocupada, O problema é que tenho 32 botoes que representam 32 mesas. Se eu clicar no Botao 1, a variável vai guardar o numero 1. Entao, todo o resto do código funcionará baseado nesse valor. Ou seja, se eu clicar no botao 16, ele nao vai mais capturar o numero da Caption, porque isso já foi feito. O resultado nao será diferente. Sempre será 1. Queria poder a medida que clicasse noutro botao, que a procedure fosse executada conforme o numero da mesa, e nao que sempre ficasse o mesmo numero. Nao faz sentido como está. Teria que ser algo que mudasse em tempo de execucao. A cada clique a variável seria preenchida novamente e a alteracao ocorreria na mesa correspondente. Entendeu????
Tem como me ajudar???
[/img]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB