Newsgroup: it.comp.appl.access
Titolo: msgbox

Aiuto semplice semplice:
in un campo data ho un controllo per evitare la data sbagliata. In caso 
d'errore ho il mio msgbox con le indicazioni del caso (data sbagliata 
ecc.ecc.) ed il tasto o (vbokonly)
Bene come faccio, alla pressione di OK  a far cancellare il campo e lasciare 
li il cursore?
Con me.[nomecampo].setfocus non mi si fila per niente!
Grazie anticipato 

 ha scritto nel
messaggio news:45675815$0$3217$4faf...@reader2.news.tin.it...

    Dim ok As Long
    If Me.data < #1/1/2001# Then
        If ok = MsgBox("!", vbOKOnly) Then Me.data = 0
    End If
Ciao.
eSQueL.

 ha scritto nel messaggio
news:riK9h.55918$Fk1.1...@twister2.libero.it...

Cosě dovrebbe fungere
Private Sub data_BeforeUpdate(Cancel As Integer)
Dim ok As Long
    If Me.data < #1/1/2001# Then
        ok = MsgBox("!", vbOKOnly)
        If ok = 1 Then Me.Undo
    End If
End Sub

 ha scritto nel messaggio
news:riK9h.55918$Fk1.1...@twister2.libero.it...

ops...scusa, devo aver bevuto :)

 End Sub
Il risultato del MsgBox è un Integer, quindi la dichiarazione di ok as
Long è da evitare in quanto
non necessaria..., poi invece di usare i valori è sempre bene usare le
costanti Enumerate
Enum VbMsgBoxResult
    Membro di VBA
in questo caso hai vbOk, ne guadagna soprattutto la leggibilità del
codice...!
Altra cosa.... manca il forzamento del Cancel...!
Private Sub data_BeforeUpdate(Cancel As Integer)
Dim ok As integer
     If Me.data < #1/1/2001# Then
         ok = MsgBox("!", vbOKOnly)
         If ok = 1 Then
            Me.Undo
            Cancel=True
     End If
End Sub
@Alex

 End Sub
Il risultato del MsgBox è un Integer, quindi la dichiarazione di ok as
Long è da evitare in quanto
non necessaria..., poi invece di usare i valori è sempre bene usare le
costanti Enumerate
Enum VbMsgBoxResult
    Membro di VBA
in questo caso hai vbOk, ne guadagna soprattutto la leggibilità del
codice...!
Altra cosa.... manca il forzamento del Cancel...!
Private Sub data_BeforeUpdate(Cancel As Integer)
Dim ok As integer
     If Me.data < #1/1/2001# Then
         ok = MsgBox("!", vbOKOnly)
         If ok = vbOk Then


Il risultato del MsgBox è un Integer, quindi la dichiarazione di ok as
Long è da evitare in quanto
non necessaria..., poi invece di usare i valori è sempre bene usare le
costanti Enumerate
Enum VbMsgBoxResult
    Membro di VBA
in questo caso hai vbOk, ne guadagna soprattutto la leggibilità del
codice...!
Altra cosa.... manca il forzamento del Cancel...!
Private Sub data_BeforeUpdate(Cancel As Integer)
Dim ok As integer
     If Me.data < #1/1/2001# Then
         ok = MsgBox("!", vbOKOnly)
         If ok = vbOk Then
            Me.Undo
            Cancel=True
     End If
End Sub
@Alex
Per la fonte, spero di poter essere più preciso domani, ma ho letto da
qualche parte che vba fa sempre un cast implicito degli Integer in Long. Per
questo non li uso più, nemmeno per i valori che sono certo resteranno
piccoli. Sono abbastanza convinto d'averlo letto, ma se sto prendendo un
granchio questa è l'occasione per rimediare :)
Ciao.
eSQueL

 eSQueL
--
sv
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 eSQueL
Effettivamente č cosě, Access converte gli integer in long automaticamente.
Questo modo di procedere fu implementato quando cadde uno dei razzi lanciato 
dalla NASA che, per ragioni economiche, non aveva fatto tutto il debug del 
nuovo software, preso integralmente dal vecchio.
In quella occasione fu un valore long che provocň un errore di overflow 
perchč la variabile era stata dichiarata come integer, prendendola dal 
vecchio software. In quell'occasione morirono tutti gli astronauti. Sic!
Ciao, Carlo 

sv ha scritto:

Vero il VarType di Enum VbMsgBoxResult è vbLong(3), quindi è
preferibile il Long in genere, ora provate ad interrogare il MSGBOX con
qualsiasi combinazione di opzioni e nonostante sia un Long vi
accorgerete che il valore restituito, è come dice l'Help un Integer,
quindi non è un errore ed è conveniente l'uso di Integer.
Sul fatto che si risparmia poco, come ho letto ci sarebbe qualcosa da
dire.... ovvio che in questa situazione
risparmi 2Byte, ma quando si usano funzioni ricorsive, quei 2 Byte sono
quelli che fanno intervenire l'OutOf Memory e qualcuno non capisce
perchè.......
A mio avviso serve razionalizzare molto ed ottimizzare meglio, in
questo caso posso concordare con voi, ma non generalizzerei.
@Alex

 vecchio software. In quell'occasione morirono tutti gli astronauti. Sic!
A me l'hanno raccontata riferendosi all' "Ariane" (III mi sembra)
Il motivo della conversione inoltre mi sembra di ricordare fosse legato 
a motivi di indirizzamento poiche' il sistema ragiona, con termine 
desueto, in termini di "voci" ed una voce corrisponde a 4 Bytes o 
comunque e' in funzione delle lunghezza dei registri. Usare 4 bytes 
comporta quindi un minor lavoro da parte del microprocessore. Ora con i 
registri a 64 bit non so piu' come stanno le cose.
--
ac

 questo caso posso concordare con voi, ma non generalizzerei.
Dai Alessandro, non farmi dire l'ovvio. Sai perfettamente che le scelte 
spesso non sono vantaggiose o svantaggiose in assoluto.
Da qualche parte mi sembra di aver letto che l'uso dei long sebbene piu' 
"long" degli integer richiede minor lavoro da parte del microprocessore 
e mediamente abbreviare i cicli di clock puo' esssere talvolta piu' 
importate che il risparmio di spazio (ram o d massa fa lo stesso)
--
ac

Alessandro Cara ha scritto:

Io sono come san tommaso, fammi una ricorsiva con i Long che si
dimostra più veloce che con gli Integer e concordo con te.....!
Il long è vantaggioso rispetto all'integer se si lavora in Memoria(il
Copymemory ed affini) che spesso si usa per velocizzare le operazioni
di Copia degli array o di comparazione delle stringhe... in quel caso
non c'è paragone ma solo per il fatto che il Long diventa il Pointer
alla locazione e non la variabile che spesso è ByteArray o Stringa.
Se invece parliamo puramente di Long e Integer come ti dicevo se non
vedo non credo....
Aspetto la funzione con i tempi...( ovviamente mi riservo di provarla)
@Alex

 ha scritto nel messaggio 
news:1164451988.8...@j72g2000cwa.googlegroups.com...
Alessandro Cara ha scritto:





@Alex
Premesso che non sono un gran provatore.
Sub provaLongInt()
    Dim a As Long, b As Double, c As Single, d As Single
    b = Timer
    For a = 1 To 10000000
         Fac (10)
    Next a
    c = Timer
    d = c - b
    MsgBox d
End Sub
Function Fac(Num As Long) As Long 'Function Fac(Num As Long) As Long
    Dim Factor As Long                        'Dim Factor As Long
    For i = Num To 1 Step -1
        Factor = Factor + i
    Next i
    Fac = Factor
End Function
Ho fatto solo tre prove:
INTEGER
11.10962
11.1095
11.016
LONG
9.82862
9.75087
9.85006
Ciao
eSQueL 

 ha scritto nel messaggio 
news:45682821$0$3201$4faf...@reader2.news.tin.it...

ops...
 Function Fac(Num As Long) As Long 'Function Fac(Num As Integer) As Long
    Dim Factor As Long                        'Dim Factor As Integer


eSQueL ha scritto:

Parlavo di funzione ricorsiva per definire il limite di Stack e di
iterazioni supportate.... oltre che alla velocità...!
Ino ogni caso poi faccio qualche prova.
@Alex

 ha scritto nel messaggio 
news:p%U9h.10114$4M6...@tornado.fastwebnet.it...

Si trattava dell'Arianne V lanciato dalla Guiana Francese (1996) e non 
portava astronauti come detto, ma solo un carico per 500 milioni di dollari.
http://www.ima.umn.edu/~arnold/disasters/ariane.html
Il fatto č che se ad una variabile integer passi un valore superiore a 
32767, nonostante la conversione o meglio la rappresentazione long, ricevi 
un errore.
Sta di fatto che una variabile integer consuma meno di una variabile long 
nonostante si tratti sempre di un valore intero. Pur tuttavia la variabile 
long č piů veloce.
2 byte significano 16 bit, 4 byte sono 32 bit.
Nelle variabili di tipo stringa ogni carattere occupa 1 byte (ossia 8 bit) 
mentre nelle variabili numeriche non č cosě: per esempio un long occupa 
almeno 4 byte (32 bit) a prescindere se lo valorizzo con 1 o con 123456, 
cioč il sistema allocca blocchi di 4 byte di memoria anche per rappresentare 
il numero 1.
Le variabili di tipo stringa a larghezza fissa posso contenere 2^16 
caratteri (cioč 65536), mentre quella a larghezza variabile ne possono 
contenere 2^31 caratteri (ossia 2.147.483.648).
Facendo il parallelo con le variabili numeriche byte succede che, con 
quest'ultime, posso scrivere numeri compresi tra 0 e 255 pur alloccando lo 
stesso numero di bit o di byte della variabile stringa.
In conclusione si puň affermare che una varabile stringa a lunghezza 
variabile puň contenere esattamente gli stessi caratteri rappresentati dal 
massimo numero utilizzabile in una variabile di tipo long, ossia 
2.147.483.648.
Lo stesso parallelo non si puň fare per il tipo integer perchč se lo 
valorizzo con 65536, come per il tipo stringa a larghezza fissa, mi dŕ 
errore di overflow. In questo caso potrň usare un numero pari a 32767.
Con i processori e i sistemi operativi a 64 bit credo che continueranno a 
restare i tipi integer ma avranno la rappresentazione a 8 byte (64 
bit)...insomma ci vorrŕ sempre piů memoria.
Ciao, Carlo
 

 errore di overflow. In questo caso potrò usare un numero pari a 32767.
Questo e' solo un problema di signed o unsigned
Direi poi 0-65535 (Hex'FFFF')
La questione della lunghezza stringa, fissa o variabile, e' un problema 
di architettura. Come puoi osservare i limiti sono esattamente le 
lunghezze che possono essere contenute in 2 o 4 bytes.
Generalmente qualsiasi limite osservabile e' funzione del numero di bit 
che lo controlla. Ci sono eccezioni dovute a configurazioni "riservate" 
che abbassano la capacita' massima utilizzabile. Esempio e' proprio 
l'integer poiche', come sai, il primo bit di sx rappresenta il segno ed 
il limite e' quindi il valore massimo raggiungibile da 15 bits (32767 
+/- che riportano comunque alle 65536 configurazioni osservabili).
Nella definizione della lunghezza stringa il segno non serve e quindi un 
unsigned integer raggiunge comodamente i 16 bits (FFFF=65535)
A suo tempo ho giocato con un po' di assembler sui mainframes IBM quando 
risparmiare spazio era un obbligo. Ne sanno qualcosa i "poveracci" che 
hanno partecipato alla conversione anno2000 e parecchi essendo 
"pischelli" si sono rovinati la vita sui "packed non segnati" che 
generalmente contenevano la data ;<).
--
ac

Alessandro Baraldi ha scritto:
[CUT]
A livello di velocità ho testato un ciclo con:
32767*500=16383500 iterazioni composte in 2 cicli ovviamente per
rimanere Integer
I tempi sono di questo tipo:
Con Variabili dichiarate Integer  T=2060,1543 (ms)
Con Variabili dichiarate Long     T=1848,7000 (ms)
Con Variabili dichiarate Double  T=2330,6600 (ms)
Con Variabili dichiarate Variant  T=4475,1404 (ms)
Effettivamente il Long è più veloce.
A livello di ricorsiva invece il risultato è il seguente:
Con Integer ho Stack esaurito con 6274 livelli di iterazioni ricorsive
Con Long    ho Stack esaurito con 6117 livelli di iterazioni ricorsive
Con Double ho Stack esaurito con 6117 livelli di iterazioni ricorsive
Con Variant ho Stack esaurito con 4531 livelli di iterazioni ricorsive
I test li ho ripetuti 5 volte per ogni tipo di variabile ed il
risultato non è mai variato.
Visto che stiamo parlando di prove e pertanto di spaccare il capello in
32767.....
Ho il Sorgente per i test se qualcuno fosse interessato ad
approfondire....
@Alex

 ha scritto nel messaggio 
news:1164470054....@f16g2000cwb.googlegroups.com...
Alessandro Baraldi ha scritto:
[CUT]










@Alex
Io.
kronos...@virgilio.it
Ciao.
eSQueL

 eSQueL
Mandami una mail su Libero che ti rispondo...con l'allegato...!
@Alex

 ha scritto nel messaggio 
news:1164473011.2...@j44g2000cwa.googlegroups.com...


 Comunque GRAZIE!, come al solito il vostro aiuto è stato risolutivo.
Che scherzi... sono belli proprio quando si parla un pò di tecnica....
altrimenti i 3D sono spesso dei Monologhi sterili ......
@Alex

 ac
Io già dagli anni 90 impiegavo la data estesa (gg/mm/aaaa) e non ho avuto i 
problemi dell'anno 2000.
In compenso, come responsabile informatico, ero in giro (la notte di 
capodanno!) con un mostruoso satellitare fornitomi dalla Prefettura. 
Bisognava essere comunque raggiungibile anche qualora i centralini fossero 
andati in tilt!
Quella notte brindai a 5 gradi davanti la casa dell'attuale moglie.
Ciao, Carlo 

 ha scritto nel messaggio
news:eka8vb$tho$1...@tdi.cu.mi.it...

Tacche sull'elsa della spada ... beh, faccio i 50 fra 58 giorni e ne ho
anch'io qualcuna.