Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Muuu

Problema RESOLVIDO

Mensagens Recomendadas

Muuu

Boas,

pessoal preciso da vossa ajuda...

estou a fazer um programa de gestão de um restaurante (como já tinha referido anteriormente noutro tópico) e não estou a conseguir fazer a condição certa para:

- ao clicar no botão (ícone do produto) este adiciona mais um ao meu sub-formulário se o código for igual ao que já lá se encontra, soma então a quantidade +1 e assim sucessivamente.

- ao clicar em outro botão (produto) para ser adicionado, qual a instrução que devo utilizar para adicionar outro produto(ou seja nesse sub-formulário ele adicionar mais uma linha...)?

cumprimentos e obrigado


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

faz um dlookup nos registro para verificar a existência...  o campo de quantidade não entra, e se os dados forem iguais  some, caso contrário, adicione o registro na tabela como novo.

seria isso??  Creio que o Dlookup poderia resolver o seu problema.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

Tem que adaptar para seu uso....  estou a te passar links que podem explicar melhor o funcionamento desta função.

http://office.microsoft.com/pt-br/access/HA012288251046.aspx

no link abaixo, mostra o uso d eoutras formas, mas recomendo que utilize em programação no form.

http://www.techonthenet.com/access/functions/domain/dlookup.php

provavelmente ajude tb

http://www.juliobattisti.com.br/FORUM/printer_friendly_posts.asp?TID=16383

Espero que ajude!! Mas caso precise pode falar.

Flw

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

uhm...

vou dar uma olhada nisto depois digo algo se consegui ou não...

abraço e obrigado


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

espero que isso ajude com o seu projeto.

sim vai ajudar de certo... mas alguem já testou isto?

não consigo chegar a uma conclusão...

tenho então uma tabela para comparar com um formulario para confirmar se ao clicar no botão o codigo desse produto é igual ao que já se encontra na mesa, se assim for adiciona mais um..

esta função devolve valor Null ou 1?

é isso?

cumprs


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

eu mesmo testei... e adaptei o comando conforme a nessecidade....

Valor nulo somente se não encontrar nada...  e ele retorna o número da linha da procura.

Pelo menos quando fiz para mim, eu usei para isso.

Flw

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

bem não estou mesmo a conseguir desembaraçar-me :s

vou aqui postar o codigo:

Function produto(num_produto)

Dim varX As Variant

varX = DLookup("[Cod_produto]", "[contamesa-nomeprod]", "Forms![Mesaconta]![contamesa2].Form![Cod_produto].text" = "[num_produto]")

If (varX = Null) Then

    Forms![Mesaconta]![contamesa2].Form![Cod_produto].SetFocus

    Forms![Mesaconta]![contamesa2].Form![Cod_produto].Text = num_produto

    Forms![Mesaconta]![contamesa2].Form![Cod_produto].SetFocus

    Forms![Mesaconta]![contamesa2].Form![quantidade] = Forms![Mesaconta]![contamesa2].Form![quantidade] + 1

    Forms![Mesaconta]![contamesa2].SetFocus

    For i = 0 To 4

        SendKeys "{tab}"

    Next i

Else

    Forms![Mesaconta]![contamesa2].SetFocus

    DoCmd.FindRecord num_produto

    Forms![Mesaconta]![contamesa2].Form![quantidade] = Forms![Mesaconta]![contamesa2].Form![quantidade] + 1

End If

não estou a conseguir conciliar o dlookup..

podem-me ajudar?

o objectivo disto é, se o produto não estiver presente no sub-formulário daquela mesa, entao adiciona, senão procura o produto e adiciona a quantidade mais um.. outro pormenor é que se não existir nenhum produto no sub-formulário então adiciona o produto.

cumprimentos


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

Como banco de dados é um pouco mais dificil de responder, devido existir tabelas... gostaria de saber, o que acontece quando está rodando a codificação?  Ocorre algum erro??  Da forma que colocou ele está aceitando o valor null???  (é que constumo usar isnull(variavel).

Aguardo uma posição.

Vou montar um teste aki pra te ajudar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

Para um pouco para repensar no que foi feito. Acho que estás a complicar demais.

O que tu precisas é algo semelhante a uma BD de gestão de stocks adaptada a tua situação certo?!

Segue esta linha de raciocinio e depois diz alguma coisa.


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

eu sabia que tinha algo parecido com o que está fazendo...  vou postar uma parte do código que utiliza o que desejas:

Public Sub Descr_Amb()
'Para trazer o nome do ambulatório

Dim intProcura, varX As Variant
Dim MSGD, TitleD

'On Error GoTo Medic_Err

'seleciona o campo
Ambulatório.SetFocus

'se campo no estado original ou vazio, sai do procedimento
If Ambulatório.Text = "_____" Or Ambulatório.Text = "" Then
    Exit Sub

'caso contrário faz a procura do Nome do Ambulatório (numeração)
Else
intProcura = Ambulatório.Text

'primeiro campo após Dlookup, é o campo a ser trazido para variável
'segundo campo é o campo pelo qual é pesquisado 
varX = DLookup("[AMBULATÓRIO]", "Amb", _
    "[CÓD] = " & intProcura)

'destrava campos a serem preenchido com dados de outra tabela
Nome_do_Ambulatório.Locked = False
Nome_do_Ambulatório.SetFocus
End If

'Se variável nula, preenche campo com texto
If IsNull(varX) Then
    Nome_do_Ambulatório.Text = "Ambulatório não encontrado"

'se variável não for nula, preenche campo com o valor setado para varx (Nome do Ambulatório)
Else
    Nome_do_Ambulatório.Text = varX
End If

'trava campo para não ser editado
Nome_do_Ambulatório.Locked = True
Exit Sub


'Tratamento do Erro
Medic_Exit:
    Exit Sub

'Linha de erro
Medic_Err:
'define mensagem

MSGD = "Verifique novamente os Campos do formulário"
'define título
TitleD = "UNICAMP"
'mensagem por completo
    MsgBox MSGD, vbCritical, TitleD
    Profissional.SetFocus
'    MsgBox Error$
    Resume Medic_Exit

End Sub

Espero que isso possa elucidar algo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

olá,

bem este código resultou pelo menos na minha forma de pensar sobre o Dlookup! e não será a melhor opção para enquadrar na minha função, mas os entendidos que se cheguem a frente...

ou seja, eu tenho de verificar se existe algum dado ( cod_produto ) repetido no meu sub-formulário, e o dlookup não trabalha com forms, somente queries e tables...

o que está a fazer perfeitamente:

o código para adicionar produtos ao meu sub-formulário é:

 

 

  Forms![mesaconta]![contamesa2].Form![Cod_produto].SetFocus
    Forms![mesaconta]![contamesa2].Form![Cod_produto].Text = num_produto
    Forms![mesaconta]![contamesa2].Form![Cod_produto].SetFocus
    Forms![mesaconta]![contamesa2].Form![quantidade] = Forms![mesaconta]![contamesa2].Form![quantidade] + 1
    Forms![mesaconta]![contamesa2].SetFocus
    For i = 0 To 4
    SendKeys "{tab}"
    Next i

codigo para ao produto, adicionar mais 1 ( conforme numero de clickes para adicionar ):

Forms![mesaconta]![contamesa2].SetFocus
       DoCmd.FindRecord num_produto
       Forms![mesaconta]![contamesa2].Form![quantidade] = Forms![mesaconta]![contamesa2].Form![quantidade] + 1
     

   

tenho isto dentro de uma função onde o num_produto trás o valor de cada botão, para facilitar, pois vou ter 7 mesas na minha base de dados e cada uma com este menu igual....

se poderem vir mais ideias agradeço...

cumprimentos e desde já um muito obrigado a todos os que ajudaram até agora  :)


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

Não te serve procurar em tabela, uma vez que os form são ligados a elas???

bom, para fazer procura em registro por for, eu costumo utilizar docmd.findrecord..

Ve se isso ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

Estava vendo umas coisas por causa do que estamos falando, procura por função Seek, mas creio que a procura dela é somente para long.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

Não te serve procurar em tabela, uma vez que os form são ligados a elas???

bom, para fazer procura em registro por for, eu costumo utilizar docmd.findrecord..

Ve se isso ajuda.

e posso declarar isto a uma variavel?

que assim testo, se não encontrar o produto(x) no meu sub-formulario, então testo se for igual a 0 então adiciona senão adiciona a quantidade...

estou a fazer-me entender?

cumprimentos e desde já um muito obrigado por todo este apoio...


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

pois mas ao estar a adicionar ao sub-formulário este não é simultaneamente adicionada a tabela/query actualizadas... so depois de fechado é que actualiza...


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

Bom, o fato do subform não atualizar direto na tabela, ou se fizesse ao contrário tb, pois não vejo problemas em procurar o registro diretamente na tabela, somente teria que dizer ao banco o seguinte:  Procure essa variável na tabela, e retorne a reposta.  Dependendo da resposta, eu tomo as atitudes necessarias, sendo ela para acrescentar o registro ou apenas atualizar  o registro como vc quer, somando os valores de campo.  Ainda acho que seria o método mais certo, mas vamos lá.

Docmd.findrecord, é usado para procuras em form e sub, porém ele tem a desagradável forma de trazer o registro a tela (talvez seja isso que queira).  a forma do comando é essa, pelo menos como uso:

DoCmd.FindRecord Variável, , True, , True

Não testei a variável como variant, geralmente uso string, e se precisar eu transformo a var em Str.

A variável vai no lugar do campo a ser procurado.

Testa e olha se isso resolve.

Vamos com calma que vamos acertar essa sua procura.

Flw!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

Boas,

bem rogi_cps estás sempre em cima, desde já obrigada :D

olha outra forma que estive a estudar foi a fazer com arreyos e está a funcionar, mas o meu problema é então agora saltar para a linha seguinte, ou seja:

Global existe_prod(7, 50) As Integer



Function produto(num_produto)

num_mesa = Forms![Mesaconta].[cod_mesa]


If existe_prod(num_mesa, num_produto) = 0 Then

        existe_prod(num_mesa, num_produto) = 1
        Forms![Mesaconta]![contamesa2].Form![Cod_produto].SetFocus
        Forms![Mesaconta]![contamesa2].Form![Cod_produto].SetFocus
        Forms![Mesaconta]![contamesa2].Form![Cod_produto].Text = num_produto
        Forms![Mesaconta]![contamesa2].Form![Cod_produto].SetFocus
        Forms![Mesaconta]![contamesa2].Form![quantidade] = Forms![Mesaconta]![contamesa2].Form![quantidade] + 1
        Forms![Mesaconta]![contamesa2].SetFocus

        For i = 0 To 4
   
            SendKeys "{tab}"
        Next i
Else
    Forms![Mesaconta]![contamesa2].SetFocus
    DoCmd.FindRecord num_produto
    Forms![Mesaconta]![contamesa2].Form![quantidade] = Forms![Mesaconta]![contamesa2].Form![quantidade] + 1
End If

compreendes?

já entei com o docmd.gotorecord mas não consigo...

entretanto vou testar o que me aconselhaste :)

cumprimentos


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

Tenta isso:

DoCmd.GoToRecord , , acNext

Se não tiver enganado ele anda para o próximo registro, agora para vc não sei se vai ao proxino no form principal ou no sub...  tem que colocar de uma forma que ele mova somente o subform.

Espero que ajude!!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

olá,

pois eu tinha a ideia que era assim, até com o acLast, que é melhor... visto que se for para um novo ele adicionara no fim( visto que tenho a instrução a dar tabs para criar um novo logo)

não estou a conseguir por isto no subformulãrio... :|

cumprs


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Muuu

vou estar verificando isso para vc.....

agradeço imenso rogi_cps, aqui tambem estou a arranjar outra maneira ou tentar dar a volta a isto...

abraço


"O mundo é pequeno para nós os 2 (Microsoft vs Apple)"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rogi_cps

ae... o que eu vi e consegui me mover entre os registro de um sub é o seguinte:

subform.setfocus

docmd.gotorecord , , acnext

form.setfocus

tenta isso... com certeza vai conseguir se mover entre os registro...  pode usar o last que num tem problema....

Espero que ajude.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.