FILTRANDO REGISTROS ...

XYKOVIEIRA 23/05/2007 10:45:15
#217883
Oi. Estou apanhando para montar um programa para uma pequena locadora. Quase tudo está funcionando OK. Apenas quando vou registrar um movimento em um form de movimentação, é que não estou conseguindo concluir.
Nesse form, o usuário entra com um número 'x' de um filme. O sistema pesquisa no banco de dados, numa tabela de cadastro <CadastrodeFilmes>. Se localiza o registro, joga esse número na textbox <txtCodFita>. Ao tabular para fora dessa textbox, é acionado o evento <GotFocus> para a próxima textbox <txtCodCodCli>.
Nesse evento, o sistema deveria procurar pelo campo <Devolução> (tabela Andamento) que estivesse vazio. Estando vazio, então informaria que o filme está emprestado, executando a função <CancelaDigitação> (que desabilita as textbox e chama a função <AtualizaFormulario>, mostrando o registro. Já tentei de diversas maneiras modificar a rotina <GotFocus> dessa textbox <txtCodCli>, mas não consegui um resultado (abaixo, transcrevi as rotinas Load, cmdIncluir e a função AtualizaFormulario). Se alguém puder ajudar, agradeço.
Chico.


Private Sub txtCodCli_GotFocus()

'Código novo. Verificar. Não está funcionando para filmes emprestados... O evento GotFocus abaixo é procedido pelo evento <CmdIncluir>, cujo código segue abaixo.

If TBAnd.NoMatch = False And IsEmpty(TBAnd.Fields("Devolução")) Then

MsgBox "Filme emprestado..."

CancelaDigitação

End If

End Sub





Private Sub cmdIncluir_Click()

Dim Novo As String

LimpaFormulario

cmdIncluir.Enabled = False

cmdAlterar.Enabled = False

cmdConsultar.Enabled = False

cmdExcluir.Enabled = False

cmdGravar.Enabled = False

cmdAnterior.Enabled = False

cmdPróximo.Enabled = False

Frame1.Enabled = True

cmdDevolve.Enabled = False

Novo = InputBox("Entre o nome do filme:")

TBFil.Seek "=", Novo ‘Procura na tabela CadastrodeFilmes.

If TBFil.NoMatch = True Then

MsgBox "Filme não cadastrado..."

Unload Me

Else

txtCodFita.SetFocus

txtCodFita = Novo

End If

End Sub





Private Function AtualizaFormulario()

On Error Resume Next

txtCodCli = TBAnd("NumCliente")

txtCodFita = TBAnd("NumFilme")

txtdatasaída = TBAnd("Retirada")

txtdataretorno = TBAnd("Devolução")

TBFil.Seek "=", txtCodFita.Text

TBCli.Seek "=", txtCodCli.Text

lblCliente = TBCli("NomedoCliente")

lblFilme = TBFil("NomedoFilme")

End Function





Private Sub Form_Load()

Set BancoDeDados = OpenDatabase(App.Path & "\FilmesVHS.mdb")

Set TBCli = BancoDeDados.OpenRecordset("CadastrodeClientes", dbOpenTable)

Set TBFil = BancoDeDados.OpenRecordset("CadastrodeFilmes", dbOpenTable)

Set TBAnd = BancoDeDados.OpenRecordset("Andamento", dbOpenTable)

TBCli.Index = "IndCódigo"

TBFil.Index = "IndCódigo"

TBAnd.Index = "IndAnda"

cmdGravar.Enabled = False

Frame1.Enabled = False

If TBAnd.EOF = False Then

AtualizaFormulario

End If

End Sub


‘Tabela Andamento – Index <IndAnda> - campos indexados: <NumFilme> e <Devolução>.

USUARIO.EXCLUIDOS 23/05/2007 11:46:26
#217901
me fala exatamente o que nao esta funcionando ...
o cancela digitação ou na procura na tabela ou o que?
USUARIO.EXCLUIDOS 23/05/2007 11:49:54
#217903
Fiz um Sistema de VideoLocadora em 1989 que funciona até hoje.
Para Movimentar um item (incluir um movimento de locacao na tabela de Movimentacao) eu Consulto a tabela de item (filmes, jogos, etc). Na tabela de item tem um campo ALUGADO (texto com 1 posição), nesse campo eu coloco "S" quando o item está alugado e "N" quando está na prateleira.
Desta forma quando o cliente digita o codigo do item a ser alugado eu verifico na tabela de itens se o item existe e se esta disponivel. Uma só consulta para resolver o problema.
Qualquer dúvida vc pode mandar mensagem interna pra mim.

Agora falando do seu problema, se quiser continuar com a mesma lógica, saia do evento GOTFOCUS para outro evento, por exemplo VALIDATE do campo anterior. Se o cliente sair do campo atual clicando em outro local seu GOTFOCUS pode não será executado.

At,
USUARIO.EXCLUIDOS 23/05/2007 11:52:05
#217905
Corrigindo o erro de datilografia...

Agora falando do seu problema, se quiser continuar com a mesma lógica, saia do evento GOTFOCUS para outro evento, por exemplo VALIDATE do campo anterior. Se o cliente sair do campo atual clicando em outro local seu GOTFOCUS não será executado.
XYKOVIEIRA 23/05/2007 14:30:52
#217932
Crazy, o que não funciona é a procura na tabela. Se um filme está emprestado, então o campo <Devolução> (no form, txtDataRetorno) está vazio. Assim, a rotina <GotFocus> de txtCodCli, que deveria devolver a msgbox com a informação de que o filme está fora, não funciona... A função <CancelaDigitação> chama a função <AtualizaFormulário> e deixa as textbox Enabled = False.
Simplesmente, quando tabulo para fora da textbox txtCodFita (e, automaticamente, chama a rotina <GotFocus> da txtCodCli), o cursor vai direto para a txtCodCli (ignorando que o filme está emprestado...).
Roberto, agradeço pela idéia da criação de um campo que identifique se o filme está emprestado ou não. Vou tentar implementar, se não conseguir manter a lógica do que fiz até agora.
Obrigado a ambos.
Chico.
Tópico encerrado , respostas não são mais permitidas