|
Postada em 30/05/2007 10:10 hs
Alguém pode me ajudar? Tenho um sistema criado na versão 5.0 do VB (com acesso a base de dados via DAO) que emprega um banco de dados <Filmes.mdb>, com três tabelas: <Andamento>, <Cliente> e <Filmes>. Na movimentação do filme (tabela Andamento), criei uma rotina, no evento <LostFocus> da textbox <txtCodFita> onde, quando o usuário entra com um número de filme, cujo campo <Devolução>, que é acessado via txtDataRetorno, estiver vazio, então o sistema informa que o filme está emprestado. Se o campo <Devolução> contiver uma data, então o sistema permite prosseguir no cadastro de nova movimentação do filme. No caso de haver apenas um registro por filme, o sistema funciona corretamente. O problema surge quando, havendo um filme que já foi devolvido (e que está com o campo <Devolução> preenchido), é permitido cadastrar um novo movimento para esse filme, sem data de retorno preenchida. Então, para um filme 'x', existe um registro de filme devolvido, e outro a devolver. Se tento cadastrar um terceiro movimento, o sistema não enxerga que o último movimento foi de saída (no caso, sem data de devolução ainda), aceitando um novo cadastro... Como posso referenciar para que o sistema sempre aponte para a última movimentação (um mesmo filme, tendo sido emprestado três vezes: em 12/12/2006 e devolvido em 13/12/2006; emprestado em 15/12/2006 e devolvido em 20/12/2006; finalmente, emprestado em 25/12/2006 e ainda não devolvido, não aceite uma nova movimentação, já que não foi devolvido ainda...)? Eis o código associado ao evento <LostFocus> da textbox txtCodFita: Private Sub txtCodFita_LostFocus() TbAndamento.Seek "=", txtCodFita If TbAndamento![Devolução] = "" Then MsgBox "Atenção! Filme emprestado..." CancelaDigitação Exit Sub Else lblFilme.Caption = TbCadFilmes.Fields("NomedoFilme") End If End Sub 'Nota: a função <CancelaDigitação> preenche os campos com os dados do filme, desabilitando o acesso às textbox.
|
|
|
|
|
Postada em 30/05/2007 10:37 hs
Uma opção seria: Faça uma seleção da tabela de movimentos por ordem de (data de empréstimo, Devolução) assim:
Select * from Andamento Where filme = 45567 order by Emprestimo, Devolucao
Vc vai ter um histórico do filme, e o último registro vai ter o estado atual do filme, ou seja, se está emprestado ou não.
Outra alternativa seria vc colocar um campo na sua tabela que serviria como parâmetro de movimento. Um campo BOOLEAN que quando marcado, daria aquele registro como encerrado, assim, ele não cairia em uma seleção. Quando fosse feita a devolução do filme, esse campo seria marcado, dado fim à transação.
|
|
|
Ama
|
UBERLÂNDIA MG - BRASIL
|
|
Postada em 30/05/2007 22:06 hs
uma consulta sql MAX retorna o valor maior da data
|
|
|
|