 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 3:36 pm Assunto: Erro ao fazer um laco com If e Then |
|
|
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 |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 4:00 pm Assunto: |
|
|
| Galera, só corrigindo, nao é If not Locate e sim if Locate..., foi erro de digitacao |
|
| Voltar ao Topo |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 4:39 pm Assunto: |
|
|
| Senhores, estou precisando muito dessa forca, por favor, me ajudem. |
|
| Voltar ao Topo |
|
 |
cyberdisk Colaborador

Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Dom Mai 26, 2013 4:48 pm Assunto: |
|
|
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 |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 5:34 pm Assunto: |
|
|
| 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 |
|
 |
cyberdisk Colaborador

Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Dom Mai 26, 2013 5:54 pm Assunto: |
|
|
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 |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 6:00 pm Assunto: |
|
|
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 |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 26, 2013 6:40 pm Assunto: |
|
|
| Você deu um Edit para alterar a tabela. E o Post? |
|
| Voltar ao Topo |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 6:41 pm Assunto: |
|
|
| Galera, alguem pode me ajudar com esse problema???? |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 26, 2013 7:02 pm Assunto: |
|
|
| Você tentou colocar o Post depois do Edit? |
|
| Voltar ao Topo |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 7:08 pm Assunto: |
|
|
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 |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 7:12 pm Assunto: |
|
|
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 |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 7:50 pm Assunto: |
|
|
| Batera, voce poderia me dar uma forca pelo msn ou coisa assim??? |
|
| Voltar ao Topo |
|
 |
Batera Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008 Mensagens: 4899 Localização: Maringá
|
Enviada: Dom Mai 26, 2013 9:12 pm Assunto: |
|
|
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 |
|
 |
jpmrift Novato

Registrado: Domingo, 7 de Abril de 2013 Mensagens: 43
|
Enviada: Dom Mai 26, 2013 10:05 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|