Semplice database per la gestione della contabilità.
Oggetti d'interesse:
Insegnanti: Query con un solo campo (Sottovoce1) contenente l'elenco degli
insegnanti.
InsegnantiCambioNomi: Maschera composta da due campi testo (VecchioNome e
NuovoNome) e un pulsante il cui click fa partire una query di aggiornamento
x sostituire eventualmente un insegnante con un altro.
InsegnantiQNomi: Query con un solo campo (Sottovoce1Q) generata dal
filtraggio di Insegnati con ciò che è scritto in NuovoNome, strutturata in
modo tale che se si tenta di cambiare il nome di un insegnante con uno che è
già presente nella query il numero di record presenti sarà 1, se invece il
nome immesso in NouvoNome è realmente nuovo la query sarà vuota con un num
di record pari a 0.
RinominaInsegnante: Query di aggiornamento.
Quello che a me serve e che prima di far partire la query di aggiornamento
si verifichi che il nome del Nuovo insegnate non sia già presente nella
lista, cioè nella query Insegnanti. Come strategia ho pensato di inserire
nella sub click del pulsante un controllo if...then con il quale conto il
numero di record presenti nella query InsegnantiQNomi, se il num è 0 procedo
con la query di aggiornamento, altrimenti blocco tutto e mando un alert.
Il problema, purtroppo, è nella stesura del codice. Avendo scarsa conoscenza
di VB e VBA sono riuscito (sarà poi così??) a capire che devo creare un
recordset associarlo a InsegnantiQNomi per poi contare i record con
recordcount. Ma, ammesso che sia giusto il ragionamento, non sono riuscito a
produrre il codice.
Qualcuno potrebbe aiutarmi inviandomi il codice da inserire dentro il
controllo?
If --------codice num record di InsegnantiQNomi = 0 -------- Then
stDocName = "RinominaInsegnante"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Conferma_nomi
DoCmd.Close
Else:
MsgBox "Il nome dell'insegnante immesso nel campo è già presente nella
lista DoCmd.Closeinsegnanti.", vbExclamation, "Errore"
Vi ringrazio in anticipo con un'ultima richiesta: inviatemi il codice per
intero senza omettere quello che per voi, magari, è sottinteso.
Ciao.
Giordano.
... al temine della routine
rst.close
dbs.close
set rst = nothing
set dbs = nothing
Devi poi impostare i riferimenti alle librerie DAO nelle proprietà del
progetto.
Ciao, Roberto
>cut
> >
> > Ciao.
> > Giordano.
> >
> >
> Dim rst as DAO.recordset
> Dim dbs as Database
> set dbs = currentdb
> set rst = dbs.openrecordset("InsegnantiQNomi",dbopenDynaset)
> If rst.recordcont = 0 then
> ..........
>
> ... al temine della routine
> rst.close
> dbs.close
> set rst = nothing
> set dbs = nothing
>
> Devi poi impostare i riferimenti alle librerie DAO nelle proprietà del
> progetto.
>
> Ciao, Roberto
>
>
Ciao Roberto,
innanzitutto ti ringrazio per avermi risposto così presto, ho fatto quello
che mi hai suggerito ma ci deve essere qualche problema...
Appena clicco sul pulsante della maschera compare un messaggio di errore
"Parametri insufficienti. Previsto 1".
Non so che dirti.
Ho inviato un nuovo post con le specifiche con le quali sto lavorando (S.O.,
ver di Access, Riferimenti...) fosse questo il problema??
Se ti viene in mente qualcosa...
Ciao.
Giordano
Dall'errore che ricevi significa che InsegnantiQNomi è una query
parametrica, nel qual caso non puoi aprire su di essa un recordset usando la
tecnica suggerita da Roberto Pasquali; per farlo vai sul Sito Comune (link
qui sotto) e leggi nella Sezione Queries cosa dice la FAQ di Federico
Luciani intitolata "Aprire una query parametrica da codice VBA.".
Comunque, come ti ho detto precedentemente, puoi non aprire alcun recordset,
ma usare una DCount (vedi help).
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Invece di aprire un recordset sulla query InsegnantiQNomi, per contare le
righe di detta query, usa una DCount (vedi help).
If DCount("*", "InsegnantiQNomi ") = 0 Then
' apri la maschera RinominaInsegnante
Else
' messaggio di errore
End If
Funzione tutto.
Grazie.