SELECIONANDO REGISTROS CONFORME CAMPOS...

XYKOVIEIRA 20/03/2012 14:56:34
#397683

Dia desses, postei um código aqui, para ver se conseguia resolver uma pequena parada: Um form de consulta com controle de dados (data control), ao ser carregado, exibe labéis de nome, cliente e um dbGrid para visualizar todos os livros que já foram emprestados. O grid possui os seguintes dados: <Cliente nº>, <NomedoCliente>, <DatadeSaida> e <DatadeRetorno>.
Ao clicar no botão <Exibir Emprestados>, somente os livros que estão fora são exibidos (existe um botão <Exibir Tudo>, que retorna à mesma condição de quando o form foi carregado (todos os registros são exibidos no DbGrid, numa ordem já definida).
Entretanto, quando não há nenhum livro fora, ao clicar em <Exibir Emprestados>, o DbGrid é exibido vazio...
Só que não consigo fazer com que a rotina abaixo funcione: ao invés de mostrar uma tela vazia (Grid vazio), uma msgbox exibisse o status da tabela (Não há livros emprestados)...
Como está o código:

Dim Procura As String
Set AM = DB.OpenRecordset([Ô]Transações[Ô], dbOpenDynaset)
Procura = [Ô]SELECT * FROM Transações WHERE Not IsNull(Saida) and IsNull(Retorno) ORDER BY Saida DESC[Ô]
If AM.NoMatch = False Then [ô]Se houver algum livro emprestado, sem data de retorno registrada...
Data1.RecordSource = Procura [ô]Os dados serão exibidos no form...
Data1.Refresh
cmdTudo.Enabled = True
cmdApagar.Enabled = False
Exit Sub
Else [ô]Caso contrário, uma msgbox será exibida....
MsgBox [Ô]Não há livros emprestados...[Ô]
End If
End Sub

[ô]Já tentei várias modificações na instrução <Select>, conforme abaixo:
[ô]Procura = [Ô]SELECT * FROM Transações WHERE Saida >=1 AND Retorno <1 ORDER BY Saida DESC[Ô]
[ô]If IsEmpty(DBGrid1.Columns) Then
[ô]If frmTransações.Label3.Caption = [Ô][Ô] Or frmTransações.Label3.Visible = False Then
[ô]If Transações.Fields!Saida >= 1 And Transações.Fields!Retorno < 1 Then
[ô]If Not IsNull(AM.Fields!Saida) And IsNull(AM.Fields!Retorno) Then
[ô]If AM.Fields!Saida >= 1 And AM.Fields!Retorno < 1 Then

Alguém pode apontar para este pobre diletante [ô]Onde foi que eu errei?[ô]
Obrigado.
MARCELO.TREZE 20/03/2012 15:34:38
#397685
Resposta escolhida
Bom seu código mistura data control com DAO, desculpe mas é uma verdadeira lambança, rs

mas tente isso

Dim Procura As String
Set AM = DB.OpenRecordset([Ô]Transações[Ô], dbOpenDynaset)
Procura = [Ô]SELECT * FROM Transações WHERE Not IsNull(Saida) and IsNull(Retorno) ORDER BY Saida DESC[Ô]
[txt-color=#0000f0] If (AM.EOF = True And AM.BOF = True) Then MsgBox [Ô]Não há livros emprestados...[Ô][/txt-color]
If AM.NoMatch = False Then [ô]Se houver algum livro emprestado, sem data de retorno registrada...
Data1.RecordSource = Procura [ô]Os dados serão exibidos no form...

XYKOVIEIRA 20/03/2012 17:35:12
#397722

Obrigado pela mão, Marcelo. Tentei mas ainda não está dando o resultado de que preciso.
(desculpe pela lambança, mas esse project é até que meio antigo, dos tempos do VB5. Vez por outra, eu o reabro e tento inserir alguma rotina
nova, até mesmo para testar novos recursos. Naquela época, eu conectava o DBGrid com um controle de dados...). A cada vez que mexo,
vou enxugando daqui e dali....
O problema, acho, deve estar na forma como tento agrupar os registros. Um dos campos (data de saída) deve conter uma data válida. E o outro
campo (data do retorno) poderá ou não conter uma data. Depende se o livro foi devolvido ou não. Não sei se declarando <IsNull> ou <Not IsNull>
na query dá certo (embora já tenha tentado outras formas, conforme expus ao princípio).
Tks[ô] anyway.
Tópico encerrado , respostas não são mais permitidas