Newsgroup: it.comp.appl.access
Titolo: Routine che chiude il db senza (?) ragione.

Ho la seguente routine
Function fQuantita()
    Dim stru As String
    Dim anno As Integer
    Dim giorno As Date
    Dim numero As Integer
    CurrentDb.Execute "DELETE * FROM tQuanti;"
    anno = 2009
    Set RST = CurrentDb.OpenRecordset("SELECT * FROM tUorg WHERE
(((tUorg.[dal])<=#" & DateSerial(anno, 31, 12) & "#) AND " & _
        "((tUorg.[al]) Is Null Or (tUorg.[al])>=#" & DateSerial(anno,
1, 1) & "#));")
    RST.MoveLast
    RST.MoveFirst
    Do While Not RST
        stri = "INSERT INTO tQuanti  ( ord, codice, nome, gen, feb,
mar, apr, mag, giu, lug, ago, stt, ott, nov, dic ) " & _
            "VALUES(" & RST!ord & ", '" & RST!codice & "', '" & RST!
nome & "', "
        For u = 1 To 12
            giorno = DateAdd("m", 1, DateSerial(anno, u, 1))
            stru = "[dal] < #" & giorno & "# and [all] >= #" & giorno
& "# and [ordine]= " & RST!ord
            numero = DCount("*", "tQuanti2", stru)
            stri = stri & numero & ", " ' QUESTA È LA RIGACCIA
        Next
        stri = Left(stri, Len(stri) - 2) & ");"
        Forms!m2!t0 = stri
        CurrentDb.Execute stri
        RST.MoveNext
    Loop
    Set RST = Nothing
End Function
Il primo ciclo mi scrive un record con i campi a posto. Dopo il primo
Movenext arriva alla RIGACCIA indicata sopra e il db se ne esce. Puff,
sparito, e mi rimane il file .ldb.
Le variabili 'stru' e 'numero'  le ho aggiunte per prova, dal momento
che altrimenti la funzione DCount mi dava un errore tipo "funzione non
disponibile in VB" quando facevo il DCount. Ho provato a riprodurlo e
il db mi si è bloccato.
La variabile 'anno' è lì per prova, perché poi sarà passata come
argomento.
Questo è solo l'ultimo dei misteri. Prima mi usciva con un errore "il
numero dei valori non coincide con il numero dei campi", perché la
variabile u, invece di fermarsi a 12, arrivava a 90! Quando chiudevo
il db, mi rimaneva aperta la maschera vuota di Access e mi usciva un
errore tipo "il db è aperto in modalità escusiva da <nomemacchina>".
Dopo le uscite, ho provato a sostituire
stri = stri & numero & ", "
con
stri = stri & "bla" & ", "
giusto per vedere, e u ha girato fino a 36...
Sono pressoché nelle vostre mani...
Riccardo Baldinotti


Prova a debuggare il codice e vedi se numero e stri si valorizzano...

 - Mostra testo citato -
Avevo provato. Quell'istruzione Forms!m2!t0 = stri è uno dei controlli
che avevo messo, e comunque eseguendo il codice passo-passo anche
numero assume regolarmente un valore.
Grazie.
Riccardo Baldinotti

 - Mostra testo citato -
Mi hai messo una pulce nell'orecchio, e ho corretto così:
            numero = DCount("*", "tQuanti2", stru)
            Forms!m2!t0 = stri & numero & ", "
            stri = stri & numero & ", "
cioè, prima di modificare stri ho provato a visualizzarla nella
casella di testo della Form m2. Ebbene, il programma mi si è chiuso
lì, come se vosse la valutazione (peraltro già compiuta 12 volte) a
dare problemi.
Riprovando il codice, dopo avere sostituito 'numero' con un valore
fisso, il programma mi è uscito quando ho interrotto il codice dalla
finestra VBA.
Riprovando con una stringa al posto di numero, tanto per vedere come
usciva, me l'ha scritta un numero di volte che non ho avuto voglia di
contare...
Il db che adopero è in uso, in questa versione, da almeno due anni,
benché con modifiche ogni poco. Uso A2007 con Svista. E mi sa che fra
poco dovrò usare anche dei tranquillanti.
Riccardo Baldinotti

 wrote:

Non vorrei sembrare insistente, ma sto provando di tutto. Ho anche
spostato la funzione in un altro db, nell'ipotesi che ci fosse un
baco, ma niente da fare.
Sono tutte istruzioni piuttosto comuni, che adopero abitualmente.
Sarà un errore di logica? Sarà il voodoo? Sarà cosa?
Gazie ancora.
Riccardo Baldinotti

 Riccardo Baldinotti
"Do While Not RST" non va bene.
Prova con "Do While Not RST.EOF"
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 -Marco-
Aggiungi anche un "Option Explicit" in testa al modulo e fai Debug/Compila.



ma "stri" non l'hai dichiarata?...

On 29 Ott, 10:49, 
marco.pizzamig...@gmail.com
 (Marco Pizzamiglio)
wrote:

EH GIÀ!!!!!!!!!!!!!!
Un accidempoli di refuso, e io che divento scemo per due giorni...
RST.EOF era proprio la risposta giusta, nell'unico posto in cui non mi
ero ancora rovinato la vista a spulciare il codice.
'stri' è dichiarata altrove, è una variabile stringa pronta sempre.
Sono un programmatore così così, ma che sarei senza di voi?
Grazie a tutti.
Riccardo Baldinotti

 'stri' � dichiarata altrove, � una variabile stringa pronta sempre.
Anche "RST" e "u"?
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 



Sì. So che in un programma avrò bisogno di un Recordset, di un Field,
di una stringa, di un codice, di un byte, ecc. così mi metto una serie
di dichiarazioni Public in un modulo 'moVarie' e uso sempre quei nomi.
Ciao.
Riccardo Baldinotti