Newsgroup: it.comp.lang.visual-basic
Titolo: Funzione di ricerca valore massimo in una tabella

Salve gente, buongiorno.
Guardate qua, a me sembra esatta ...
Public Function ProssimoNumeroFattura() As Integer
        Dim NumFatt as integer
        Dim CercaN As New ADODB.Recordset
        CercaN.Open "Select Max(NumeroFatt) as C from fatture", Cn
        If IsNull(CercaN(0)) = True Then numfatt = 0 Else numfatt =
CercaN(0)
        ProssimoNumeroFattura = numfatt + 1
        CercaN.Close
        Set CercaN = Nothing
End Function
Da 1 a 9 funziona....poi arriva a 10 e continua a inserire 10 per opgni
volta che la eseguo ...
Che cosa sbaglio ?
-- 
X.Gregorio - Responsabile Tecnico
It Consulting Srl - Roma
Http://www.Xaziende.com
Risolvi l'addizione per rispondermi in privato
(psssst... fa 59... )

 Che cosa sbaglio ?
Non vedo grossi problemi nel codice.
Piuttosto, non vorrei che il campo NumeroFatt fosse un campo di testo.
Inoltre, verifica di non essere in multiutenza, perchè una logica del genere
è ad alto rischio.
Ciao
Alberto
-- 
Rigore è quando arbitro fischia

 Piuttosto, non vorrei che il campo NumeroFatt fosse un campo di testo.
Era un campo testo :)
Ecco, per esempio, mi spieghi per quale motivo da uno  a 9 scrive , anche se
è testo ...
e poi non piu ?
C'e' un motivo tecnico ?


 C'e' un motivo tecnico ?
9<10
"9">"10"
Basta?


 C'e' un motivo tecnico ?
Il motivo te lo ha spiegato Albe V°
Occhio che un Testo che rappresenta un numero ti crea problemi anche di
ordinamento.
Modificalo così:
with cercan
    nLen = .fields("C").definedsize
    If IsNull(CercaN(0)) = True Then numfatt = 0 Else numfatt =
cint(CercaN(0))
    prossimonumerofattura = right(string(nlen,"0") & trim(cstr(numfatt)),
nlen)
end with
Tieni anche presente che, come ha sottolineato Albe V°, avrai (grossi)
problemi di concorrenza in ambiente multiutente, se vai a leggere il nuovo
numero fattura direttamente dall'ultima salvata.
ciao
ugo

 Basta?
Numerici
Nove č minore di Dieci .
E ci siamo
Stringhe:
Nove č maggiore di Dieci.
E non capisco.
Anche se fosse la lunghezza delle stringa...nove č 1 char , dieci sono
due...
Albe, "loquiscimi" la risposta :))


Ma...O_o
Ciao...
--------------------------------
Inviato via 
http://usenet.libero.it

 numero fattura direttamente dall'ultima salvata.
Sto adottando la politica dei "semafori"...non so se l'avete presente.
Se un utente scrive , il semafor è rosso, quando ha finito , torna verde...
Dovrebbe bastare no ? :)

 due...
:-<
Non è len("9") > len ("10")
"9" > "1" CHE POI CI SIANO ALTRI CARATTERI DOPO CHE C'ENTRA!!!!???
Qui ti tiro le orecchie: va bene l'"eternamente newby", ma adesso non stai
giocando a vb!
In firma ti leggo "Responsabile Tecnico": siilo!       ;-)
ciao
ugo

 E non capisco.
Stai scherzando?
Nell'elenco dei caratteri Ascii, viene prima 1 o 9?
Sai usare un dizionario?
Viene prima "Dieci" o "Cento"?
Alberto

 due...
Allora guardala cosě:
"A" < "BA"
eppure "BA" sono 2!
:)
Ciao

 verde... Dovrebbe bastare no ? :)
Si.
Dipende da una cosa, principalmente:
- Chi rimette a verde il semaforo? L'applicativo che lo ha messo a rosso?
Male, molto male...
ciao


 Dovrebbe bastare no ? :)
No.
Qui si sta parlando di assegnazione di un numero univoco ad una fattura:
questo significa che due utenti devono poter scrivere due fatture diverse
contemporaneamente, ti pare?
Puoi:
1) usare un progressivo che incrementi immediatamente dopo aver assegnato il
nuovo numero
2) usare un semaforo direttamente sulla tabella testate fatture, ma _solo_
durante la fase di assegnazione del numero fattura: poi salvi e non se ne
parli piů.
...in entrambi i casi, assicurati che il tuo utente poi non decida di
annullare l'inserimento...
ciao
ugo

 annullare l'inserimento...
Beh, voglio sperare che Akuma faccia girare la funzioncina, di
individuazione del nuovo numero, un attimino prima di eseguire l'insert, non
certo all'inizio della creazione fattura.
Per cui, il blocco sarebbe per un secondo al massimo, e può anche andare
bene, se non ci sono troppi utenti.
Ciao
Alberto

 Viene prima "Dieci" o "Cento"?
Cento :)
Credo di aver capito.:)
Select max prende il numero piu alto se il campo č numerico.
Mentre se il campo č stringa, tende a mettere in ORDINE ALFABETICO :)
i campi e quindi a darti Dieci maggiore di Cento.
A questo punto non capisco pero' perche' se il campo č stringa
Fino a Nove funziona...passando per Uno , due e tre mentre secondo questa
logica dovrebbe darmi tre uno due ...
o no ?

 annullare l'inserimento...
beh, credo che la soluzione classica sia quella di assegnare il numero alla
fattura solo nel momento in cui l'operatore decide di "emetterla", quindi
quando è già completamente completata.
da lì in poi, se ha qualche problema, direi che non è molto diverso dalla
gestione cartacea: quando hai emesso una fattura non la puoi più cancellare.
--
Salutoni
Sergio

 annullare l'inserimento...
Come al solito, le tue risposte mi piacciono.
Ho stampato il tuo post e lo terro' presente :)
Grazie ugo :)

 questa logica dovrebbe darmi tre uno due ...
OK. Stai scherzando.
Alberto

 o no ?
no. la tua funzione trova come massimo sempre il 9, quindi aggiunge uno e ti
restituisce 10
--
Salutoni
Sergio

 ha scritto nel messaggio
news:Tsfab.325467$Ny5.10...@twister2.libero.it...

Dai! E' la prima volta che uso Max :))
Non sto scherzando :)
Sono un imbecille forse :)
Spiegami meglio il MAX applicato alle stringhe :)

 restituisce 10
Hai ragione. E continuo a non capire.
Cazzo. :(

 Spiegami meglio il MAX applicato alle stringhe :)
Calmati.
Non è un problema di Max, o di <, o di altro.
e' un problema di mancanza di fondamentali di informatica.
Non sapere cosa sono i codici Ascii pregiudica molte cose.
Ma, soprattutto, è la mancanza di buona volontà che disarma. ti ho parlato,
prima, di tabella Ascii.
Ne hai visualizzata una?
Sicuramente no, altrimenti la storiella del tre-due-uno te la risparmiavi.
Quindi, se non vuoi imparare, non posso aiutarti.
Ciao
Alberto

 Hai ragione. E continuo a non capire.
allora... ricominciamo...
ho una lista con questi numeri (che vengono memorizzati in campi di tipo
testo)
6
7
8
se chiedo il max di questa lista ottengo, ovviamente, "8"
prendiamo invece quest'altra:
8
9
10
Staimo parlando di campi testo, quindi il max e il min vengono calcolati in
funzione del codice ascii del primo carattere (in caso di uguaglianza si
prende in considerazione il secondo e così via), quindi la tua richiesta
equivale a dire: tirami fuori l'elemento che, ordinato secondo l'ascii dei
caratteri, sta all'ultimo posto. quindi, in questo caso, il "9"
così è più chiaro?
--
Salutoni
Sergio

 certo all'inizio della creazione fattura.
si
- CCSoft:
si anche a te
- Akuma
grazie, ma ti ho detto le stesse cose degli altri...
ciao
ugo


...e due "tirate d'orecchie"!
Akuma, studia!   ;)
ciao
ugo

 cosě č piů chiaro?
Beh, si :)))
quindi 0 > 9 ..ora ho capito :)
Grazie. :)


for n=48 to 57
    debug.print n, chr(n)
next
ciao
ugo

 quindi 0 > 9 ..ora ho capito :)
akuma, non capisco piů se scherzi o fai sul serio.
0 < 9 perchč, dal punto di vista del testo 0 vale 48, mentre 9 vale 57
10 < 9 perchč 1 vale 49 e 9 vale 57, e quindi il confronto si ferma qui
95 > 94 perchč il primo valore č uguale (il famoso 57) e quindi viene
confrontato il secondo
nota a margine: se tu avessi formattato i numeri, normalizzandoli ad un
prefissato numero di caratteri, e avessi quindi scritto
001
002
003
eccetera, il confronto testuale o quello numerico avrebbero dato gli stessi
risultati.
ma il perchč stavolta te lo trovi da solo.
--
Salutoni
Sergio

 quindi 0 > 9 ..ora ho capito :)
Già. Infatti:
0<9
"0"<"9"
Il punto che ti riguarda è:
"9">"1", lascia stare il povero 0...
Alberto

 ma il perchè stavolta te lo trovi da solo.
;)
ciao
ugo

 quindi 0 > 9 ..ora ho capito :)
Manco pe niente....
Gente , io ho capito quello che è successo,
e che ero convinto di fare un certo ragionamento di base per capire come
funzionava
(il fatto dell'elenco in ordine alfabetico...) che era del tutto sbagliato.
In pratica tutto si riduce a prendere il primo "numero" della stringa e
trasformarlo in numerico
tramite la funzione ASC...
La gara di Max viene vinta dall'ASC(n) piu alto.
Non sono stupido. E' che mi disegnano cosi'.