Newsgroup: it.comp.appl.access
Titolo: select max( Left(Tabella.Campo),Len(Tabella.campo)-3)

Buon Pomeriggio, con una Query avrei la necessità di estrapolare tutto
che c'e' a sinistra del campo N° Ordine della tabella ordini, ce è
così composto: Numero d'ordine + data quindi vorrei 1/07
adotto la seguenti qury per estrapolare il Max per poi aggiungere +1
per la progressione numerica ma niente da fare, non mi funziona, posto
la routine, mi dareste una mano per favore?
Public Function N_Ord()
Dim mioRsT As Recordset
Dim varANNO As String, Ord As Long
Set miodb = CurrentDb
Set mioRsT = miodb.OpenRecordset("SELECT MAX(Left('" &
TblOrdini.NumOrdine & "'),Len('" & TblOrdini.NumOrdine & "') -
3)AS_NOrd FROM TblScarico", dbOpenDynaset)
If mioRsT.EOF = False Then
   mioRsT.MoveLast
   mioRsT.MoveFirst
   Ord = mioRsT!NOrd + 1
   varANNO = Format(Date, "YY")
      N_Ord = Ord & "-" & varANNO
ElseIf mioRsT.RecordCount = 0 Then
  Ord = 1
  varANNO = Format(Date, "YY")
        N_Ord = Ord & "-" & varANNO
End If
End Function


1) Quando c'e' una funzione di aggregazione (i.e. max) e' necessario 
mettere la group by. La tua select dovrebbe dare errore sintattico. La 
hai provata direttamente dal pannello delle query?
2) Nel tuo caso, ed inserendo la group by, ti verrebbero resituiti piu' 
valori, un valore massimo per ciascuna Len('" & TblOrdini.NumOrdine & "')
3) Se la parte "Numero Ordine" e' di lunghezza diversa (i.e. 11/07 vs 
2/07) la max va "masticata" altrimenti non funziona.
Io 'sto tentativo lo farei:
max = clng("0" & dmax("left(right('00000' & 
numordine,8),5)","tblOrdini")) + 1
N_Ord = max & "-" & Format(Date, "YY")
"max" in questo caso e' direttamente il numero del nuovo ordine.
Non ti serve fare tutta quella roba con il recordset (se ho capito 
quello che fa il tuo codice).
La formula, non la ho provata, va bene fino a 99998 ordini
-- 
ac
y-1=x


P.S. Riguardandola ho il dubbio che a tabella ordini vuota possa fallire
max = clng("0" & dmax("left(right('00000' &
nz(numordine,'/xx',8),5)","tblOrdini")) + 1
cosi' dovrebbe andare anche nel caso di tabella vuota
-- 
ac
y-1=x

 y-1=x
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------


In tutto questo sto impazzendo !!! nell'editor VBA scrivo la seguenti
sintassi :Set mioRsT = miodb.OpenRecordset("SELECT MAX(Left(" &
NumOrdine & ",Len(" & NumOrdine & ")-3)AS NOrd FROM TblScarico",
dbOpenDynaset)
ma continua a darmi questo tipo di errore "Errore di sintassi
(Operatore mancante) della espressione della query 'Max (Left(" &
NumOrdine & ",Len()-3)AS NOrd FROM TblScarico'.
le ho provate tutte anche con il generatore Sql, ma nulla...mi viene
da piangere.
Comunque grazie per la disponibilità ad entrambi, è sempre bello
trovare persone disposte a darti una mano
saluti
diego

 Len è parte della funzione Left... secondo me hai sbagliato qualche cosa...!
Es claro.
-- 
ac
y-1=x


a occhio la sintassi generale va bene forse sostituirei la stringa 
numordine con il campo
"SELECT MAX(Left(NumOrdine,Len(NumOrdine)-3)AS NOrd FROM TblScarico"
-- 
ac
y-1=x

 - Mostra testo tra virgolette -
Niente non va....mah...c'e' da impazzire!!!

 ha scritto nel messaggio
news:1186245955.1...@l70g2000hse.googlegroups.com...

Public Function N_Ord()



End Function
C'è una cosa che non torna....
Perchè fai riferimento al campo [TblOrdini.NumOrdine] e lo cerchi nella
Tabella [TblScarico]....?
Sei certo di non aver commesso un errore di Copia/Incolla...?


 y-1=x
Ciao


 ha scritto nel messaggionews:1186245955.1...@l70g2000hse.googlegroups.com...

Ciao Alessandro, si è vero ho commesso un errore di copia incolla, la
tabella è la TblScarico ma anhecon la TblScarico non funziona, la
TblScarico è composta dai campi:CodiceArticolo,
CodiceScarico(Key),NumOrdine,DataScarico,UnitaMisura,PresoinCaricoDa,Settore,Quantita,Descrizione.
la Query che ho tentato di implementare, anzi la routine è la
seguente:
Public Function N_Ord()
Dim mioRsT As Recordset
Dim varANNO As String, Ord As Long
Dim StrQry As String
Set miodb = CurrentDb
StrQry = ("SELECT MAX (Left$(NumOrdine,Len(NumOrdine)-3))as NOrd FROM
TblScarico")
Set mioRsT = miodb.OpenRecordset(StrQry, dbOpenDynaset)
If mioRsT.EOF = False Then
   mioRsT.MoveLast
   mioRsT.MoveFirst
   Ord = mioRsT!Tot + 1
   varANNO = Format(Date, "YY")
      N_Ord = Ord & "/" & varANNO
ElseIf mioRsT.RecordCount = 0 Or IsNull(mioRsT) = True Then
  Ord = 1
  varANNO = Format(Date, "YY")
        N_Ord = Ord & "-" & varANNO
End If
End Function
ma non funziona, credimi e ho provate tutte, ho anche creato una
function che mi estrapolasse la parte destra del record senza il
carattere " / " e l'anno corrente formattato in 07, per poi passare il
valore alla routine sopracitata, ma nulla, e non capisco dove sbaglio!
eppure penso che la sintassi sia giusta, ....Mah !
Grazie comunque .
Saluti
Diego

dimenticavo, tutti i campi sono di tipo testo, tranne la data di
scarico (data/ora) e Quantita (Numerico)
Scusate.
Saluti
Diego


e correggo anche un'ulteriore castroneria che ho scritto nel post
sopra
Ord = mioRsT!Tot + 1 ...Errato
Ord = mioRsT!NOrd + 1 .....Esatto
scusate di nuovo
saluti
Diego

 ha scritto nel messaggio 
news:1186261196.3...@k79g2000hse.googlegroups.com...



Public Function N_Ord()

End Function


Grazie comunque .
Non è ne capisca molto, pero' mi chiedevo a cosa servisse il meno -3 qui:
StrQry = ("SELECT MAX (Left$(NumOrdine,Len(NumOrdine)-3))
-- 
Ciao
Access 


il meno 3 serve a farmi restituire il numero senza il carattere "/" e
l'anno formattato in due cifre , per intenderci se il campo ha come
valore 123/07 l'istruzione dovrebbe farmi restituire solo 123 .
Saluti
Diego

 ha scritto nel messaggio 
news:1186264170....@57g2000hsv.googlegroups.com...

Io non è che abbia capito bene cosa vuoi ottenere, credo che se in NumOrd 
sia memorizzato 12, tu vuoi ottenere 12/07 + 1 cioe' 13/07 giusto?
se è cosi
che errore ti viene mostrata a schermo? tipo non corrispondente?
Se si prova a lasciare la variabile "ord" come variant e togli il -3.
-- 
Ciao
Access

 - Mostra testo tra virgolette -
e poi come aggiungi il +1 se non gli fai leggere solo la parte
numerica senza data?
nn credo che settando ord a variant mi permetta di fare a meno del -3
saluti
diego

 ha scritto nel messaggio 
news:1186266297....@22g2000hsm.googlegroups.com...


Forse non ho compreso il tuo problema.
ma il campo NumOrdine com'è composto?
se il tuo NumeroOrdine memorizzato nella tua tabella è 12345 + anno invece 
di -3 devi mettere -4
se il tuo NumeroOrdine è 12345 + gg mm anno invece di -3 devi mettere -8
insomma il -3 se ho capito bene è il punto di inzio della funzione left.
-- 
Ciao
Access 

 
Non c'e da impazzire. Mi sembra di averlo gia' scritto. In un 
alfanumerico 11 e' minore di 2. Be careful e tieni conto di tabella 
vuota, in quel caso la left mi sembra vada in errore. Dovresti tornare 
al mio primo suggerimento.
La query dovrebbe essere corretta ed "eseguibile".
Per favore quando scrivi che non va sarebbe importante descrivere "cosa" 
non va, se la istruzione (errore sintattico)  o il risultato.
Tutto cio' al di la del nome della tabella che immagino tu sappia 
benissimo quale e' quella giusta.
-- 
ac
y-1=x


wrote:

Grazie Alessandro, adesso ci provo !