Appunti Access-Vba
2
SOMMARIO
Sql .............................................................................................................................. 5
Insert:............................................................................................................................................................. 5
Update: .......................................................................................................................................................... 5
Delete: ........................................................................................................................................................... 5
Inserire una riga vuota: ................................................................................................................................. 5
Cancellare ultima riga: ................................................................................................................................... 5
Copiare intera riga da una tabella ad unaltra:.............................................................................................. 5
Sql in un ciclo for: .......................................................................................................................................... 5
Accodamento incondizionato:....................................................................................................................... 5
Svuotare tabella:............................................................................................................................................ 5
Operatore LIKE:.............................................................................................................................................. 5
Operatore BETWEEN: .................................................................................................................................... 6
Maschere ................................................................................................................... 6
Aprire Form: .................................................................................................................................................. 6
Chiudere Form: .............................................................................................................................................. 6
Requery elenco collegato a Query: ............................................................................................................... 6
Refresh Form: ................................................................................................................................................ 6
Refresh Form e SubForm: .............................................................................................................................. 6
Focus su ultima riga di casella riepilogo: ....................................................................................................... 6
Impedire al Form la modifica dei valori della tabella collegata: ................................................................... 6
Controllare un campo come variabile: .......................................................................................................... 6
Dati di una Listbox ......................................................................................................................................... 6
Origine dati Listbox:....................................................................................................................................... 6
Origine dati Maschera: .................................................................................................................................. 7
Abilitare/disabilitare controlli maschera: ...................................................................................................... 7
Impostare focus su controllo: ........................................................................................................................ 7
Campo calcolato in Maschera non collegata ................................................................................................. 7
Preparare una casella combinata:.............................................................................................................. 7
Report ........................................................................................................................ 7
Origine dati Report: ....................................................................................................................................... 7
Visualizza anteprima:..................................................................................................................................... 7
Stampa diretta senza anteprima: .................................................................................................................. 8
Fascicolare report: ......................................................................................................................................... 8
3
Recordset ................................................................................................................... 8
Estrazione intestazioni colonne recordset .................................................................................................... 9
Database .................................................................................................................... 9
Strutture tabelle standard: ............................................................................................................................ 9
VBA ............................................................................................................................ 9
Esempio funzione Replace:............................................................................................................................ 9
Andare a capo nel codice: ............................................................................................................................. 9
Anno corrente: .............................................................................................................................................. 9
Stampa immediata report: ............................................................................................................................ 9
Ricerca valore in tabella: ............................................................................................................................... 9
Creazione di un Numero Seriale .................................................................................................................. 10
Funzione per estrazione di un numero da una stringa di testo: ................................................................. 10
Access ...................................................................................................................... 11
Impostare il database Access come interfaccia utente ............................................................................... 11
4
SQL
Insert:
INSERT INTO tabella (col1, col2, ...) VALUES (val1, val2, );
Update:
UPDATE tabella SET _
& tabella.col1 = & var1 & , _& tabella.col2 = & var2 & , _
& tabella.col3 = & var3 & _
& WHERE .;
Delete:
DELETE * FROM tabella WHERE ;
Inserire una riga vuota:
INSERT INTO tabella (col_qualsiasi) VALUES ();
Cancellare ultima riga:
DELETE FROM tabella WHERE tabella.ID = & Dlast (ID, tabella) & ;
Copiare intera riga da una tabella ad unaltra:
INSERT INTO tabella2 SELECT * FROM tabella1 WHERE tabella1.ID = var_id;
Sql in un ciclo for:
For i = 1 to Forms!nomemaschera.nomecampo.Value
CurrenteDb.Execute (stringa sql)
Next i
Accodamento incondizionato:
INSERT INTO tabella 2 SELECT tabella1.* FROM tabella1
Svuotare tabella:
DELETE * FROM tabella
Operatore LIKE:
SELECT * FROM tabella WHERE col1 LIKE %stringa%;
Restituisce tutti i valori di col1 che contengono stringa, con %=carattere jolly.
5
Operatore BETWEEN:
SELECT * FROM tabella WHERE col1 BETWEEN val1 e val2;
Restituisce tutti i valori di col1 che compresi tra val1 e val2.
MASCHERE
Aprire Form:
DoCmd.OpenForm nomeform
Chiudere Form:
DoCmd.Close acForm, nomeform, acSaveYes
Requery elenco collegato a Query:
Forms!nomemaschera.nomeoggetto.Requery
Refresh Form:
Me.Refresh
Refresh Form e SubForm:
(Chiudere e Aprire in sequenza la maschera)
Focus su ultima riga di casella riepilogo:
Forms!nomemaschera.nomeelenco.Selected (Forms!nomemaschera.nomeelenco.ListCount 1) =
True
Impedire al Form la modifica dei valori della tabella collegata:
(Su evento Form BeforeUpdate) Me.Undo
Controllare un campo come variabile:
varcampo= nomecampo
Me.Controls(varcampo),Value
Dati di una Listbox
Una ListBox riepiloga la visualizzazione delle colonne nellordine in cui sipresentano nella struttura
di query o di tabella a cui si collega lorigine dati
Origine dati Listbox:
Me.[nomelista].RowSource = "[nome query]"
6
Origine dati Maschera:
Forms![nome maschera].RecordSource = "[nome query]"
Abilitare/disabilitare controlli maschera:
Me![nome controllo].Enabled = True/False
Impostare focus su controllo:
Me![nome controllo].SetFocus
Campo calcolato in Maschera non collegata
Creare una funzione di calcolo in Modulo1 (es. PIPPO() );
In PIPPO() si faccia riferimento ai valori di una maschera o ai campi di un recordset
opportunamente filtrato;
PIPPO () deve restituire un valore (fine codice: PIPPO = valore);
Inserire la funzione PIPPO() nellorigine dati del campo calcolato ( =PIPPO());
In ogni campo che contribuisce al calcolo di PIPPO() inserire Me.Refresh nellevento
AfterUpdate;
Il campo calcolato varier ad ogni modifica dei campi relazionati.
Preparare una casella combinata:
Inserire una combo con procedura guidata.
Selezionare la colonna ID, la colonna da mostrare in tendina ed eventuali altre colonne.
Se necessario modificare la query associata alla sorgente dati.
In propriet/formato verificare sempre numero colonne = n colonne della query.
In propriet/formato impostare a 0cm le larghezze delle colonne che vanno nascoste.
In propriet/dati impostare come colonna associata quella dellID.
In propriet/dati impostare valore predefinito = n ID da mostrare
La combo selezionata restituisce i seguenti valori:
- Forms![nomemaschera].[nomecombo].Value (il valore della colonna associata)
- Forms![nomemaschera].[nomecombo].Column(n) (il valore di qualsiasi colonna, da 0 a n)
REPORT
Origine dati Report:
Me.RecordSource = "[nome query]" (su evento _Open, PREFERIBILE) oppure
DoCmd.OpenReport [nome Report], acViewNormal, [nome query] (da controllo esterno)
Visualizza anteprima:
DoCmd.OpenReport "[nome Report]", acViewPreview
7
Stampa diretta senza anteprima:
DoCmd.OpenReport "[nome Report]", acViewNormal, [nome query], "", acHidden
Fascicolare report:
For MyPageNum = 1 To NumPages 'numero di righe tabella o query
DoCmd.SelectObject acReport, "report1", True seleziona il 1 report
DoCmd.PrintOut acPages, MyPageNum, MyPageNum stampa il 1 report
DoCmd.SelectObject acReport, "report2", True seleziona il 2 report
DoCmd.PrintOut acPages, MyPageNum, MyPageNum stampa il 2 report
ecc ecc
Next MyPageNum
RECORDSET
Conteggio righe tabella/query con funzione access DCount:
NumRows = Dcount (*, nometabella)
Creazione di un recordset DAO, filtro del record e modifica:
Dim dbs As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Set dbs = CurrentDb
Set rs1 = dbs.OpenRecordset("SELECT * FROM tabella;")
rs1.Filter = "COLONNA = '" & Forms!nomeform.COLONNA_VAR.Value & "'"
Set rs2 = rs1.OpenRecordset
rs2.MoveLast
rs2.MoveFirst
Do Until rs2.EOF
rs2.Edit
For i = 0 To rs2.Fields.Count-1
rs2.Fields("COLONNA1") = Forms!nometabella.COLONNA1_VAR.Value
rs2.Fields("COLONNA2") = Forms!nometabella.COLONNA2_VAR.Value
..
Next i
rs2.Update
rs2.MoveNext
i=0
Loop
Set rs2 = Nothing
8
Set rs1 = Nothing
Set dbs = Nothing
Estrazione intestazioni colonne recordset
For i = 0 to rs.Fields.Count 1
MsgBox rs.Fields(i).Nome
next i
DATABASE
Strutture tabelle standard:
Nomi colonne tutte in maiuscolo, nomi composti uniti da _
Tipo dati tutti VARCHAR 100, compreso i dati numerici (eccetto contatori)
Per raggrupamento record usare colonna GRUPPO inserendo ad esempio una variabile di tipo
Now() (data+ora+secondi)
VBA
Esempio funzione Replace:
C= pippo
C=Replace(C, p, l) [C diventa lillo]
Andare a capo nel codice:
ciao _
& comprati _
& arraphaho
Anno corrente:
Year(Now())
Stampa immediata report:
DoCmd.OpenReport "carta", acViewNormal, "", "", acHidden
Ricerca valore in tabella:
var1 = Dlookup (COLONNA, tabella, ID[o altro] = x) var1 assume valore COLONNA per ID=x
9
Creazione di un Numero Seriale
Function seriale()
anno_corrente = Dlookup ("ANNO_CORRENTE", "SERIALE", "ID=1") 'legge l'anno corrente
registrato
If Year(Now) <> anno_corrente Then 'se l'anno attuale diverso dall'anno corrente...
CurrentDb.Execute "UPDATE seriale SET PROGRESSIVO = 0 WHERE ID = 1;" ' azzera il contatore
CurrentDb.Execute "UPDATE seriale SET ANNO_CORRENTE = " & Year(Now) & " WHERE ID = 1;"
'registra il nuovo anno corrente
End If
progressivo = DLookup("PROGRESSIVO", "SERIALE", "ID=1")
progressivo = progressivo + 1 'incrementa il progressivo
CurrentDb.Execute "UPDATE seriale SET PROGRESSIVO = " & progressivo & " WHERE ID = 1;"
'registra il progressivo
seriale = "J" & Month(Now) & Format(Now, "yy") & Format(progressivo, "00000") 'composizione
del n seriale
End Function
Funzione per estrazione di un numero da una stringa di testo:
Function cifra(str) As Double
Dim T As String
Dim C As String
Dim i As Integer
Dim IsNumero As Boolean
'Application.Volatile True
T = str
C = ""
IsNumero = False
For i = 1 To Len(T)
If Mid(T, i, 1) = "," And IsNumero = True Then
C = C + ","
IsNumero = False
End If
If Mid(T, i, 1) = "." And IsNumero = True Then
C = C + "."
IsNumero = False
End If
If Mid(T, i, 1) <= "9" And Mid(T, i, 1) >= "0" Then
10
C = C + Mid(T, i, 1)
IsNumero = True
Else
IsNumero = False
End If
Next i
C = Replace(C, ".", ",")
cifra = CDbl(C)
End Function
Gestione degli errori
Sub nomesub () o Function
On Error Resume Next
codice
codice passibile di errore
If Err.Number <> 0 Then gestione dellerrore
MsgBox "Avviso di errore" o qualsiasi altra azione
End If
altro codice
End Sub o Function
ACCESS
Impostare il database Access come interfaccia utente
11
1. Impostare le opzioni di apertura database corrente come mostrato in figura
(per ripristinare le impostazioni cliccare sul file tenendo premuto SHIFT)
2. Sullevento OnLoad di TUTTE le maschere inserire: DoCmd.ShowToolbar
Ribbon, acToolbarNO
3. Sulle propriet FORMATO di tutte le maschere impostare
a. Selettori record: NO
b. Pulsanti spostamento: NO
12