SELECT MAX.
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.
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.
Brodher usa assim:
SQL = "SELECT MAX(CodigoEntrada) as Maximo FROM Entrada"
Rs!Maximo
SQL = "SELECT MAX(CodigoEntrada) as Maximo FROM Entrada"
Rs!Maximo
tenta assim:
desse jeito ele vai pegar o maior registro de cada data
Ps: editei pq esqueci da virgula depois da data
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
Elaine, a query é essa
select max(CodigoEntrada) from Entrada
where Data in
(select max(Data) from Entrada)
select max(CodigoEntrada) from Entrada
where Data in
(select max(Data) from Entrada)
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
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
Agradeço as respostas, mas ainda não deu certo .
Já testei com a 3 sugestões.
Segue a sub-rotina.
[/c]
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]
Já tentei com todas as sugestões e não deu certo .
Segue a sub-rotina:
[/c]
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]
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
esqueci que desse jeito tem q ter um group by
corrigindo:
[/c]
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]
Aparentemente consegui resolver o problema.
Estava tratando as informações do SELECT incorretamente. Obrigada a todos pela ajuda.
[/c]
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