Sei sulla pagina 1di 12

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