Newsgroup: it.comp.appl.access
Titolo: estrapolare numero da un campo testo e memorizzarlo altra colonna

ci riprovo!
ho una maschera in cui un controllo mi incrementa un contatore nel 
formato 000045

 come faccio?
Prova cosi:
NomeTuoControllo = Left(NomeControlloCalcolato, InStr(1, 
NomeControlloCalcolato, "/") - 1) / 25
-- 
Ciao
Geppo 

geppo <c...@tin.it.invalid> ha scritto:


 attualmente ad es. al n° 000001 mi da 0,04  invece di 1.
Usa int:
NomeTuoControllo = int(Left(NomeControlloCalcolato, InStr(1, 
NomeControlloCalcolato, "/") - 1) / 25)
-- 
Ciao
Geppo

 NomeControlloCalcolato, "/") - 1) / 25) +1
o faccio una stronzata?
l.


Cosi pero' se il valore e tra 1 e 25 ti da 2.
prova cosi:
NomeTuoControllo = iif(Left(NomeControlloCalcolato, InStr(1, 
NomeControlloCalcolato, "/") - 1) <=25, Int(Left(NomeControlloCalcolato, 
InStr(1, NomeControlloCalcolato, "/") - 1) / 25), 
Int(Left(NomeControlloCalcolato, InStr(1, Testo9, "/") - 1) / 25 + 1))
-- 
Ciao
Geppo 

 
provato! ma adesso tra 1 e 25 mi da 0!
l.

 
l'ho provato e pare che va bene! infatti al 000001

> "/") - 1) / 25 + 1))
ho trovato qui una funzione di Nick che fa proprio al caso tuo:
http://groups.google.it/group/microsoft.public.it.office.access/browse_thread/thread/d1b3bed4f6bc1d3b/4c145b9e43be2b30?hl=it&lnk=st&q=arrotondare#4c145b9e43be2b30
Inserisci in un modulo standard questa funzione:
=================================
Public Function arrotondasup(numero As Double) As Double
Dim p_int As Integer
Dim p_dec
p_int = Int(numero)
p_dec = numero - p_int
If p_dec > 0 Then
    arrotondasup = p_int + 1
Else
    arrotondasup = p_int
End If
End Function
=========================================
Poi nell'evento current della form:
NomeTuaCasellaControllo = arrotondasup(Left(NomeCasellaControlloCalcolato, 
InStr(1, NomeCasellaControlloCalcolato, "/") - 1) / 25)
Per quanto riguarda il valore predefinito, non si puo'.
-- 
Ciao
Geppo

da 26 a 50 mi dia 2 
Direi che la formula generale per ottenere quello che dici con
qualsiasi numero di base, nel tuo caso 25, sia
Base=25 
N = il numero da considerare
Risultato = ((N-1)\Base)+1
Prova e vedrai, ad 1 a 25 =1
da 26 a 50 = 2 etc
Ciao
Filippo

 
filippo! ti puoi esprimere con un esempio pratico basato sulla formula 
giusta postata precedentemente? con la mia base di conoscenza, non ci 
arrivo 
a quello che hai detto! abbi pazienza! grazie
l.


La hai riportata male. Filippo ha scritto questo:
Risultato = ((N-1)\Base)+1
Quella "controslash" (o barra al contrario che dir si voglia) non e' un 
errore. Significa: restituisci l'intero della divisione fra il 
mionumero-1 (N-1) e il divisore (Base).
i.e.  ((27-1)\25) + 1 = 2
-- 
ac
y-1=x

l.
NumeroCheMiInteressa=((Val(Left(ControlloInQuestione,6))-1)\25)+1
Ciao
Filippo

NumeroCheMiInteressa=((Val(Left(ControlloInQuestione,6))-1)\25)+1
Ovviamente uso Left(NomeControlloCalcolato,6)
anziché
InStr(1, NomeControlloCalcolato, "/") che è più ridondante, sul
presupposto che il formato sia sempre di 6 cifre: "000000", in caso
contrario devi usare al posto di 6 la lunghezza della stringa che
precede la "/"
Scusa la precisazione se ti sembra ovvia.
Se poi NumeroCheMiInteressa è Variant puoi omettere la funzione Val()
perché la conversione è fatta internamente.
Ciao
Filippo

 
ok! solo che ho un problema, mettendolo sull'evento della maschera "su 
corrente", quando faccio nuovo record e non inserisco niente, mi salva 
comunque il record e la numerazione va avanti, e a me non stà bene! dato che 
viene gestito da più utenti in contemporanea. Invece se avrei potuto metterlo 
su valore predefinito del controllo campo, questo non dovrebbe succedere, ma 
memorizzare il numero solo se qualche altro campo venisse riempito.
o sbaglio?
l.
mi consigliate una soluzione pratica? grazie
e scusate se approfitto della vostra disponibilità eh!
l

mi consigliate una soluzione pratica? grazie
Cosě, al volo,mi viene in mente questa soluzione pratica:
Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim Titolol As String
    Dim Msg As String
    Titolo = "Salvare il record?"
    Msg = "I dati sono cambiati." & vbCrLf & "Vuoi salvare le
modifiche?"
 
    If Me.Dirty = True Then
      Select Case MsgBox(Msg, vbQuestion + vbYesNoCancel, Titolo)
        Case vbYes
        'non fare nulla
        Case vbNo
          DoCmd.RunCommand acCmdUndo
        Case vbCancel
          Cancel = True
      End Select
    End If
End Sub
ciao
Filippo

cut
scusa, ma cosi farò prendere un esaurimento ai miei colleghi che quando 
cambiano record (anche andando su quelli esistenti per ricerche e 
visualizzazione), devono scegliere se salvare o no il record anche se non vi 
hanno fatto nulla.
la funzione dovrebbe attivarsi solo su nuovi record!
l. 


all'interno dell'evento current della form inserisci il codice che fa i 
calcoli in una if:
private sub current_form()
if newrecord then
qui inserisci i calcoli
end if
end sub
in questo modo eviti i messaggi ad ogni cambio record piochè il calcolo 
viene effettuato solo se il record è nuovo
-- 
Ciao
Geppo 



Non è così (puoi fare una prova se credi)
Se ti sposti tra record senza modificare nulla l'evento Before_Update
non si verifica.
Però si verifica se modifichi un dato in un controllo e poi magari lo
ripristini uguale a prima.
Es. se setti e resetti un check, anche se il valore ritorna lo stesso
che aveva oppure se cancelli un carattere e poi lo riscrivi uguale
allora si che l'evento si verifica (ma converrai con me che capita
molto raramente.......)
Dall'Help in linea:
Quando si immettono dati nuovi o modificati nel controllo di una
maschera e ci si sposta su un altro record o si salva il record
scegliendo Salva record dal menu Record, gli eventi PrimaDiAggiornare
e DopoAggiornamento relativi alla maschera si verificano
immediatamente dopo gli stessi eventi relativi al controllo. 
Quando ci si sposta su un altro record, si verificano gli eventi
Uscita e Disattivato per il controllo, seguiti dall'evento Corrente
per il record sul quale ci si è spostati e dagli eventi Invio e
Attivato per il primo controllo del record. Per eseguire le macro o le
routine evento PrimaDiAggiornare e DopoAggiornamento senza eseguire le
macro o le routine evento Uscita e Disattivato, salvare il record
scegliendo il comando Salva record dal menu Record.
Ciao
Filippo

Se preferisci prova questa, l'ho scritta ora e mi pare che funzioni:
If Modificato Then
	' chiede di salvare e in caso di risposta negativa annulla
end if
Private Function Modificato() As Boolean
    Dim Controllo As Control
 
    For Each Controllo In Me.Controls
 
        Select Case Controllo.ControlType
            Case acTextBox, acCheckBox, acComboBox
                If Controllo.OldValue <> Controllo.Value Then
                    Modificato = True
                    Exit For
                End If
        End Select
    Next
 
End Function
Ciao
Filippo