SELECT MAX.

USUARIO.EXCLUIDOS 13/12/2006 16:29:18
#189776
A cada nova entrada no sistema, o campo código deve se comportar da seguinte maneira (Cód+Data)
1131206, 2131206, 3131206, 1141206, 2141206... etc
Onde o primeiro dígito identifica o número da entrada e a seguir a combinação da data.

Quando as entradas ocorrem no mesmo dia, o sistema funciona direitinho, mas qdo existe a mudança de data, como no exemplo acima, não está dando certo.
Até sei o porquê. Estou usando a instrução:
SQL = "SELECT MAX(CodigoEntrada) FROM Entrada"
Onde CodigoEntrada é um campo que armazena somente o valor da entrada e não essa combinação com a data. Este campo tb aceita duplicação.

A instrução teria que verificar o maior código e também a data.

Alguém pode me dar uma sugestão de como resolver?

O Banco é Access. Na tabela entrada eu tenho os campos CodigoData (q é a combinação) CodigoEntrada (somente o código), DtEntrada(data dd/mm/yyy), CodigoFornecedor, etc.
LUIS.FLAVIO 13/12/2006 16:33:27
#189779
Brodher usa assim:

SQL = "SELECT MAX(CodigoEntrada) as Maximo FROM Entrada"

Rs!Maximo
HUGOSSOUZA 13/12/2006 16:36:04
#189781
tenta assim:
SQL = "SELECT data, MAX(CodigoEntrada) as Maximo FROM Entrada group by data" 


desse jeito ele vai pegar o maior registro de cada data

Ps: editei pq esqueci da virgula depois da data
LIONHEART 13/12/2006 17:00:59
#189795
Elaine, a query é essa

select max(CodigoEntrada) from Entrada
where Data in
(select max(Data) from Entrada)
USUARIO.EXCLUIDOS 13/12/2006 17:19:35
#189802
Resposta escolhida
Elaine, pelo que entendi vc usa um único campo, acho que seria melhor vc usar doisa campos, um código e outro data, daí usaria a query:

SELECT TOP 1 Data, CodigoEntrada
FROM Entrada
ORDER BY Data DESC, CodigoEntrada DESC

Daí vc tb pode unir (concatenar) os campos (se for access):
SELECT TOP 1 CodigoEntrada & Format(Data, 'DDMMYY')
FROM Entrada
ORDER BY Data DESC, CodigoEntrada DESC


Qualquer dúvida poste...flw
USUARIO.EXCLUIDOS 13/12/2006 17:33:40
#189805
Agradeço as respostas, mas ainda não deu certo .
Já testei com a 3 sugestões.
Segue a sub-rotina.

   
[c]Private Sub Gerar_CodigoEntrada()
Dim Dia As Long

Set TabEntrada = New ADODB.Recordset
If TabEntrada.State = 1 Then TabEntrada.Close

SQL = "SELECT MAX(CodigoEntrada) FROM Entrada WHERE DtEntrada IN (SELECT MAX (DtEntrada) FROM Entrada)"
TabEntrada.Open SQL, ConectaBanco, adOpenKeyset, adLockReadOnly

If IsNull(TabEntrada(0)) = True Then
CodigoE = 1
Else
CodigoE = TabEntrada(0) + 1
End If

Dia = Format(Date, "ddmmyy")
lblCodigoEntrada.Caption = CodigoE & Dia


TabEntrada.Close
Set TabEntrada = Nothing

End Sub

[/c]
USUARIO.EXCLUIDOS 13/12/2006 17:38:39
#189808
Já tentei com todas as sugestões e não deu certo .
Segue a sub-rotina:

[c]Private Sub Gerar_CodigoEntrada()
Dim Dia As Long

Set TabEntrada = New ADODB.Recordset
If TabEntrada.State = 1 Then TabEntrada.Close

SQL = "SELECT MAX(CodigoEntrada) FROM Entrada WHERE DtEntrada IN (SELECT MAX (DtEntrada) FROM Entrada)"
TabEntrada.Open SQL, ConectaBanco, adOpenKeyset, adLockReadOnly

If IsNull(TabEntrada(0)) = True Then
CodigoE = 1
Else
CodigoE = TabEntrada(0) + 1
End If

Dia = Format(Date, "ddmmyy")
lblCodigoEntrada.Caption = CodigoE & Dia


TabEntrada.Close
Set TabEntrada = Nothing

End Sub

[/c]
HUGOSSOUZA 13/12/2006 18:13:52
#189816
tenta assim:

Private Sub Gerar_CodigoEntrada()
Dim Dia As Long

Set TabEntrada = New ADODB.Recordset
If TabEntrada.State = 1 Then TabEntrada.Close

SQL = "select TOP 1 DtEntrada, MAX(CodigoEntrada) FROM Entrada ORDER BY DtEntrada desc"
TabEntrada.Open SQL, ConectaBanco, adOpenKeyset, adLockReadOnly

If IsNull(TabEntrada(0)) = True Then
CodigoE = 1
Else
CodigoE = TabEntrada(0) + 1
End If

Dia = Format(Date, "ddmmyy")
lblCodigoEntrada.Caption = CodigoE & Dia


TabEntrada.Close
Set TabEntrada = Nothing

End Sub
HUGOSSOUZA 13/12/2006 18:19:16
#189817
esqueci que desse jeito tem q ter um group by
corrigindo:

[c]Private Sub Gerar_CodigoEntrada()
Dim Dia As Long

Set TabEntrada = New ADODB.Recordset
If TabEntrada.State = 1 Then TabEntrada.Close

SQL = "select MAX(CodigoEntrada) FROM Entrada where data = (select max(DtEntrada) from Entrada "
TabEntrada.Open SQL, ConectaBanco, adOpenKeyset, adLockReadOnly

If IsNull(TabEntrada(0)) = True Then
CodigoE = 1
Else
CodigoE = TabEntrada(0) + 1
End If

Dia = Format(Date, "ddmmyy")
lblCodigoEntrada.Caption = CodigoE & Dia


TabEntrada.Close
Set TabEntrada = Nothing

End Sub

[/c]
USUARIO.EXCLUIDOS 14/12/2006 10:00:02
#189879
Aparentemente consegui resolver o problema.
Estava tratando as informações do SELECT incorretamente. Obrigada a todos pela ajuda.


[c]Private Sub Gerar_CodigoEntrada()
Dim Dia As Long

Set TabEntrada = New ADODB.Recordset
If TabEntrada.State = 1 Then TabEntrada.Close

SQL = "SELECT TOP 1 DtEntrada, CodigoEntrada FROM Entrada ORDER BY DtEntrada DESC, CodigoEntrada DESC"
TabEntrada.Open SQL, ConectaBanco, adOpenKeyset, adLockReadOnly


With TabEntrada
If .BOF And .EOF Then
CodigoE = 1
End If

If !DtEntrada <> Date Then
CodigoE = 1
Else
CodigoE = !CodigoEntrada + 1
End If

Dia = Format(Date, "ddmmyy")

End With


lblCodigoEntrada.Caption = CodigoE & Dia

TabEntrada.Close
Set TabEntrada = Nothing

End Sub

[/c]
Tópico encerrado , respostas não são mais permitidas