4M - Appunti di INFORMATICA
Transcript
4M - Appunti di INFORMATICA
Brescianet.com Sito didattico - Prof. Sechi Marco FAQ Profilo Cerca Lista degli utenti Non ci sono nuovi messaggi Gruppi utenti Esci [ e01692 ] III Modulo - 4M Indice del forum -> Appunti - Classi 4 Argomento precedente :: Argomento successivo Autore e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Messaggio Inviato: 12 Gen 2005 08:00 am Soggetto: III Modulo - 4M Accoda qui gli appunti Ultima modifica di e01692 il 25 Giu 2005 12:26 pm, modificato 1 volta in totale Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 12 Gen 2005 08:01 am Soggetto: 4M - 12/01/2005 wsf ==> linguaggio di prg in ambiente windows per costruire dei batch file (comandi che eseguono delle operazioni di sistema in sequenza: utile per automatizzare operazioni ripetitive) - E' praticamente identico al vba proprietà di un oggetto ==> caratteristiche event driven==> questo tipo di prg si basa su eventi ovvero se accade qualcosa verrà eseguito lo script associato a quell'evento (sempre che il programmatore l'abbia previsto) me ==> in vba è un riferimento all'oggetto contenitore - Nella maschera è un riferimento alla maschera stessa Me.BtnChiudi.Visible = False Esercizio 1 Costruire una maschera con due bottoni btn1 e btn2 e un textbox (txtfrase) - Le operazioni supportate devono essere le seguenti btn1 ==> cliccando deve visualizzare il messaggio (msgbox "frase") contenuto in txtfrase txtFrase==> su uscita deve cambiare l'etichetta di btn1 in "Chiudi la maschera" (me.btn1.caption) btn2==> su click deve chiudere la maschera ==> docmd.close Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 15 Gen 2005 10:00 am Soggetto: 15/01/2005 - 4M If Me.lbltesto.ForeColor = vbBlack Then Me.lbltesto.ForeColor = vbRed Me.lbltesto.BackColor = vbBlack Else Me.lbltesto.ForeColor = vbBlack Me.lbltesto.BackColor = vbRed End If Dovete sapere i nomi in inglese delle proprietà illustrate - usare F1 per ricercarli -------------Sub lbltesto_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.lbltesto.Caption = "x:" + CStr(X) + " - y:" + CStr(Y) End Sub Sub lbltesto_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.lbltesto.Caption = "x:" + CStr(X) + " - y:" + CStr(Y) End Sub --Fino al seconda lezione Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 17 Gen 2005 11:50 am Soggetto: 17/01/2005 - 4M le variabili sono zone di memoria dove posso parcheggiare dei valori che acquisisco durante l'elaborazione spiegata la visibilità e option explicit L'oggetto docmd equivale al menu di access (a grandi linee) Fatto variabili globali - msgbox e clng - breakpoint e debug Il breakpoint serve a bloccare l'esecuzione di un prg in un punto preciso - Obbiettivo del debug è localizzare errori semantici presenti nel vs algoritmo Private Sub btnesegui_Click() Dim s As String s = "ciao studente modello" Me.txtfrase = s End Sub ------Option Compare Database Option Explicit Dim z As Long Private Sub btnesegui_Click() Dim x As Long, y As Long x = Me.txta y = Me.txtb z = y + x * 3 + 2 * (x + y) Me.txtfrase = "il risultato è " + CStr(z) End Sub Private Sub btnvedi_Click() MsgBox "il risultato è " + CStr(z) End Sub -------Apre una nuova maschera e chiude la maschera corrente -----------Private Sub BtnApriEs1_Click() DoCmd.OpenForm "Esempio1" DoCmd.Close acForm, Me.Name ' DoCmd.Close acForm, "Maschera2" End Sub ----Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 19 Gen 2005 08:01 am Soggetto: 19/01/2005 - 4M Private ==> indica una routine o una variabile visibile solo all'interno del modulo che la cointiene Public ==> una procedura visibile ovunque nell'MDB le variabili dichiarate all'interno di una sub sono visibili solo all'interno di quella variabile Sub Somma(x As Long, y As Long) MsgBox CStr(y) + " + " + CStr(x) + " = " + CStr(x + y) End Sub per richiamare la funzione somma posso scrivere cosi Call Somma(3, 8) oppure Somma 3, 8 ' ----------------Public Sub pippo() Dim x As Long, y As Long x = InputBox("Dammi x", "Inserisci primo parametro", 0) y = InputBox("Dammi y", "Inserisci primo parametro", 0) Somma x, y End Sub Le function sono delle sub che restituiscono un valore il cui tipo è dichiarato nell'intestazione della funzione stessa '-----------------------Public Sub pippo() Dim x As Long, y As Long, z As Long x = InputBox("Dammi x", "Inserisci primo parametro", 0) y = InputBox("Dammi y", "Inserisci primo parametro", 0) z = SommaFunct(x, y) MsgBox CStr(y) + " + " + CStr(x) + " = " + CStr(z) End Sub Function SommaFunct(x As Long, y As Long) As Long SommaFunct = x + y End Function Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 22 Gen 2005 11:02 am Soggetto: 22/1/2005 - 4M La function esegue una serie di istruzioni e restituisce un valore che viene specificato con una istruzione di questo tipo: NomeFunzione=ValoreRestituito ----------Sub Potenza(x As Long, y As Long) Me.lblpotenza.Caption = CStr(x ^ y) End Sub Function PotenzaF(x As Long, y As Long) As String PotenzaF = CStr(x ^ y) End Function Private Sub Form_Load() Call Potenza(3, 2) Me.lblpotenzaf.Caption = PotenzaF(5, 3) End Sub ------------Sub Incrementa(y As Long) y=y+1 End Sub Sub Decrementa(ByRef y As Long) y=y-1 End Sub Private Sub Form_Load() Dim x As Long x=1 Incrementa (x) Debug.Print "Dopo incrementa: " + CStr(x) '1 Decrementa (x) Debug.Print "Dopo decrementa: " + CStr(x) '0 End Sub -----------ByVal => passaggio di parametri in questa modalità ==> uso il valore ma non modifico il valore della variabile passata (in access 97 è il comportamento predefinito) ByRef => passaggio di parametri per indirizzo. in questa modalità ==> uso il valore e modifico il valore della variabile passata (in access XP è il comportamento predefinito) -----------Sub Potenza(ByVal b As Long, ByVal n As Long, ByVal r As Long) r=b^n End Sub Sub PotenzaCorretta(ByVal b As Long, ByVal n As Long, ByRef r As Long) r=b^n End Sub Private Sub Form_Load() Dim x As Long, y As Long, z As Long x=3 y=2 Call Potenza(x, y, z) Debug.Print "Dopo Potenza (senza byref): " + CStr(z) '0 Call PotenzaCorretta(x, y, z) Debug.Print "Dopo PotenzaCorretta (senza byref): " + CStr(z) 'x^y End Sub -----------Option Compare Database Function PotenzaF(ByVal b As Long, ByVal n As Long) As Long PotenzaF = b ^ n End Function Sub Potenza(ByVal b As Long, ByVal n As Long, ByRef r As Long) r=b^n End Sub Private Sub Form_Load() Dim x As Long, y As Long, z As Long x=3 y=2 Call Potenza(x, y, z) Debug.Print "Dopo Potenza (senza byref): " + CStr(z) 'x^9 z = PotenzaF(x, y) Debug.Print "Dopo PotenzaCorretta (senza byref): " + CStr(z) 'x^y End Sub --------------- In html posso scrivere codice VB <HTML> <SCRIPT LANGUAGE=VBSCRIPT> sub Saluta msgbox "Ciao" end sub </SCRIPT> <BODY onLoad="Saluta()"> </BODY> ------------Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 24 Gen 2005 07:59 am Soggetto: 24/01/2005 - 4M forme immediate if condA then Istruz if condA then Istruz1:Istruz2 if x>0 then x=1 : exit sub Posso usare una forma immediata per l'if iif(cond,A,B) esempio Dim votofinale as string votofinale=iif(voto>5.5,"suff.","insuff.") in alternativa alla forma estesa if (x > 5.5) then VotoFinale="Suff." else VotoFinale="Insuff." end if Isnull, isnumeric La finestra immediata può essere usata per testare dei valori o delle funzioni es. print <nomevariabile> print <nomefunzione> es. print currentdb.name mid, left, right, len ---------For i=<Valore iniziale> To <ValoreFinale> step <passo> Codice VBA Next è equivalente a i=<Valore iniziale> While i<>ValoreFinale Codice VBA I=i+[passo] Wend per terminare l'esecuzione usare <ctrl+Interr> DEBUG F8 ==> eseguo una istruzione alla volta - se è una sub o una function entro dentro e si posiziona nella prima istruzione F5 ==> riprendo l'esecuzione con il print nella finestra immediata valuto i valori delle mie variabili Aggiungi espressione di controllo ==> consente di fermare l'esecuzione quando la var testata assume un determinato valore Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 29 Gen 2005 11:49 am Soggetto: 29/01/2005 - 4M currentdb currentdb.TableDefs(6).Fields.Count ' RecordSet ==> oggetto che cattura una Qry o una tabella ' tramite Currentdb.openrecordset(CmdSQL) catturo la lista dei record che soddisfano il mio comando SQL rs.MoveFirst rs.MoveNext rs.Movelast rs.Moveprevious rs.eof ==> proprieta che restituisce falso se siete in fondo all'elenco oppure se nessun record soddisfa la VS Query rs.Bof ==> proprieta che restituisce falso se siete ALL'INIZIO DELL'elenco oppure se nessun record soddisfa la VS Query ---------Dim rs As Recordset Set rs = CurrentDb.OpenRecordset("SELECT Nome FROM TblEsempio") If Not rs.EOF Then ' controllo che ci siano dei record rs.MoveFirst While Not rs.EOF ' finchè non sono in fondo MsgBox Cstr(rs("idRec"))+" - "+rs("Nome") ' in alternativa MsgBox Cstr(rs(0))+rs(1) rs.MoveNext Wend End If rs.Close ------currentdb.TableDefs(6).name oppure currentdb.TableDefs("TblEsempio").name L'indice va usato quando devo scorrere tutti gli oggetti di una collezione for I=0 to Collezione.count-1 oggetto(i).proprieta next per accedere ad un particolare oggetto di una collezione si usa il suo nome No esempio sui forms Currentdb.querydefs ==> insieme delle Qry Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 29 Gen 2005 11:50 am Soggetto: 28/01/2005 - 4M now , format 1<>"1" l'evento load del form è usato generalmente per inizializzare se TimerInterval =0 allora l'eventp Timer non viene mai attivato proprietà enabled vbCrLf ==> carriage return - line feed ==> invio vbcrlf ==> chr(10)+ chr(13) chr(codice ascii) ==> restituisce il carattere corrispondente al codice ascii passato come parametro esempio chr(49) ==> "0" Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 31 Gen 2005 07:55 am Soggetto: 31/01/2005 - 4M ---------------rs(NomeCampo") ==> valore le campo del record corrente (ovvero quello puntato dal recordset CurrentDb rappresenta in VBA il file MDB che state utilizzando OpenRecordset è un metodo dell'oggetto DB che accetta come argomento una Qry o il nome di una tabella e restituisce un oggetto capace di gestire il risultato della query stessa (oggetto recordset) 1° RICERCA - 1 metodo Public Sub RicercaPerID(idRec As Long) Dim rs As Recordset Dim CmdSQL As String CmdSQL = "SELECT NOME FROM TblEsempio WHERE idRec=" + CStr(idRec) Set rs = CurrentDb.OpenRecordset(CmdSQL) If Not rs.EOF Then ' controllo che ci siano dei record rs.MoveFirst MsgBox CStr(idRec) + " - " + rs("Nome") Else MsgBox "non trovato" End If rs.Close End Sub 2° RICERCA - 2 metodo Public Sub RicercaPerID(idRec As Long) Dim rs As Recordset Dim CmdSQL As String CmdSQL = "SELECT * FROM TblEsempio" ' oppure il nome della tabella: ' CmdSQL = "TblEsempio" Set rs = CurrentDb.OpenRecordset(CmdSQL, dbOpenDynaSet) If Not rs.EOF Then ' controllo che ci siano dei record rs.findfirst "idRec="+cstr(idRec) if not rs.NoMatch then MsgBox CStr(idRec) + " - " + rs("Nome") Else MsgBox "non trovato" End If end if rs.Close End Sub ------------------findfirst è un metodo dell'oggetto recordset che vuole come argomento lo stesso che uso con la clausola where rs.NoMatch La proprietà noMatch restituisce vero se il metodo FindFirst o findNext (precedentemente applicato) non restituiscono alcun record Public Function RicercaPerIniziali(Iniziali As String) As Long Dim rs As Recordset Dim CmdSQL As String CmdSQL = "SELECT Count(*) AS Nr FROM TblEsempio WHERE Nome like '" + Iniziali + "*' " Set rs = CurrentDb.OpenRecordset(CmdSQL) If Not rs.EOF Then rs.MoveFirst RicercaPerIniziali = rs("Nr") End If rs.Close End Function Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 21 Feb 2005 07:11 am Soggetto: 19/02/2005 in win98 ==> mscomctl.ocx è il Microsoft common control pe utilizzare i comandi del RecordSet occorre andare in una finestra di codice e richiamare il menu Strumenti --> riferimenti aggiungere dao Esempio trova e trova successivo ========================== Option Compare Database Dim pM As Long Private Sub BtnTrova_Click() Dim p As Long p = InStr(Me.TxtTesto, Me.txttrova) pM = p If p > 0 Then Me.TxtTesto.SetFocus Me.TxtTesto.SelStart = p - 1 Me.TxtTesto.SelLength = Len(Me.txttrova) End If End Sub Private Sub BtnTrovaSucc_Click() Dim s As String s = Mid(Me.TxtTesto, pM + Len(Me.txttrova)) pM = pM + Len(Me.txttrova) - 1 p = InStr(s, Me.txttrova) If p > 0 Then pM = pM + p Me.TxtTesto.SetFocus Me.TxtTesto.SelStart = pM - 1 Me.TxtTesto.SelLength = Len(Me.txttrova) End If End Sub Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 21 Mar 2005 08:16 am Soggetto: 21/03/2005 - 4M Spiegato esercizio 2 in dettaglio Torna in cima e01692 Site Admin Registrato: 07 Set 2004 Messaggi: 214 Inviato: 06 Apr 2005 11:31 am Esercizio 7 Soggetto: 06/04/2005 - 4M - Option Compare Database Const Cst_Rosso = "0" Const Cst_Verde = "1" Const Cst_Bianco = "2" Const Cst_Giallo = "3" Const Cst_Nero = "4" Private Sub BtnRegistra_Click() Dim Colore, i As Long, j As Long Dim s As String s = "" For i = 0 To 1 For j = 0 To 1 Colore = Me.Controls("C" + CStr(i) + CStr(j)).BackColor If Colore = vbRed Then s = s + Cst_Rosso ElseIf Colore = vbGreen Then s = s + Cst_Verde ElseIf Colore = vbWhite Then s = s + Cst_Bianco ElseIf Colore = vbYellow Then s = s + Cst_Giallo ElseIf Colore = vbBlack Then s = s + Cst_Nero End If Next Next Open "pippo.txt" For Output As #1 Print #1, s Close 1 MsgBox s End Sub Private Sub BtnRileggi_Click() Dim s As String, c As String Dim r As Long, col As Long Open "pippo.txt" For Input As #1 s = Input(LOF(1), 1) Close 1 Me.sequenza = s For i = 0 To 1 For j = 0 To 1 c = Mid(s, i * 2 + j + 1, 1) If c = Cst_Rosso Then Me.Controls("c" + CStr(i) + CStr(j)).BackColor = vbRed ElseIf c = Cst_Verde Then Me.Controls("c" + CStr(i) + CStr(j)).BackColor = vbGreen ElseIf c = Cst_Bianco Then Me.Controls("c" + CStr(i) + CStr(j)).BackColor = vbWhite ElseIf c = Cst_Giallo Then Me.Controls("c" + CStr(i) + CStr(j)).BackColor = vbYellow ElseIf c = Cst_Nero Then Me.Controls("c" + CStr(i) + CStr(j)).BackColor = vbBlack End If Next Next End Sub Private Sub Form_Load() Me.c00.BackColor = vbYellow Me.c01.BackColor = vbWhite Me.c10.BackColor = vbGreen Me.c11.BackColor = vbBlack End Sub Torna in cima Mostra prima i messaggi di: Tutti i messaggi Prima i vecchi Vai Tutti i fusi orari sono GMT Indice del forum -> Appunti - Classi 4 Pagina 1 di 1 Controlla questo argomento Vai a: Appunti - Classi 4 Puoi inserire nuovi argomenti in Puoi rispondere agli argomenti in Puoi modificare i tuoi messaggi in Puoi cancellare i tuoi messaggi in Puoi votare nei sondaggi in Puoi moderare Vai al Pannello di Amministrazione Powered by phpBB 2.0.10 © 2001, 2002 phpBB Group Vai questo questo questo questo questo questo forum forum forum forum forum forum
Documenti analoghi
4N - Appunti di INFORMATICA
esempio pratico (elenca gli studenti che nel nominativo presentano la lettera selezionata)
---------------Lettera = InputBox("Dammi la lettera che ricerchi nel nominativo studenti")
Set rs = Curren...
VBA XLS - Appunti di INFORMATICA
Brescianet.com
Sito didattico - Prof. Sechi Marco
FAQ
Profilo
4M - Appunti di INFORMATICA
maschera
perchè uso inserire nel nome una sigla iniziale associata al tipo ? Spiegato
lbl... => etichetta
txt... => textbox
btn... => bottone
lst... => listbox
cmb... => combobox