Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Muuu

Problema RESOLVIDO

Recommended Posts

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)"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Muuu

e qual é a sintaxe desse comando?

estou mesmo a nora... :s


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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
rogi_cps

Tem como postar o arquivo paa verificar o resultado em cima dele???  Aguardo

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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!!

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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)"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.