Newsgroup: it.comp.lang.visual-basic
Titolo: Giudicate questo mio codice...promosso o bocciato?

Salve,
vi posto questa cosa che stò scrivendo, ma vorrei un confronto con
chiunque legge il post ovviamente :)) LA CRITICA DEVE ESSERE
COSTRUTTIVA!!! Se cominciate a dirmi che sono una merda mi depirmo e
finisce tutto :)))
Vi spiego cosa accade...ho una dll dalla quale mi prendo un po di
cose, un valore per la connessione, altre cosette...non ce ne frega
niente (è una finestra di atutentificazione). La pswd è giusta e parte
il mio form; dentro c' è una combo, una griglia (spread), un tastino
per uscire e uno per cancellare le righe selezionate. Cosa ho pensato
io...cominciamo :)) All' avvio del mio form mi collego subito al
database e mi popolo la combo. Io avevo scritto nel modulo un unica
funzione che mi creava un recordset e lo riutilizzavo per popolarmi
prima la combo e poi la griglia, in uffucio me l' hanno bocciato
perchè hanno detto che è meglio fare due cose separate (bhà...) quindi
da form_load chaimo ComboRecordset.
Cliccando sulla combo mi vado a popolare la griglia, e li ho creato
(sempre nel modulo) il secondo recordset (call SpreadRecordset)...(di
fatto devo fare la stessa cosa, per questo avevo fatto un unica
funzione.) Selezionando le righe della griglia popolata, scatta la
cancellazione...ho accennato qualcosa ma...li mi interessa poco, come
giudicate il fatto di usare un modulo con dentro le funzioni (2 molto
simili) per popolare una combo e una griglia? Nel complesso, il mio
codice/logica, come risulta?
Option Explicit
Private Connessione As ADODB.Connection
Dim strSql As String
Private LoginCtrl As LoginControl
Private Const COL_MAXCOLS = 3
Private Const COL_LOGIN = 1
Private Const COL_LOGOFF = 2
Private Const COL_APPLICAZIONE = 3
_________________________________________________________
Private Sub Form_Load()
    Dim cmbRecset As ADODB.Recordset
 
    On Error GoTo formerror
 
    'all' avvio della form setta le dimensioni dello spread
    With spdUtente
        .MaxRows = 0
        .Row = .MaxRows
        .MaxCols = COL_MAXCOLS
        .Col = COL_LOGIN
        .Text = "Login"
        .Col = COL_LOGOFF
        .Text = "Logoff"
        .Col = COL_APPLICAZIONE
        .Text = "Applicazione"
    End With
 
    'creo l' oggetto LoginCtrl
    Set LoginCtrl = New LoginControl
    LoginCtrl.ApplicationEntry = "Gestore Eventi"
    LoginCtrl.Login
 
    'creo l' oggetto connessione
    Set Connessione = New ADODB.Connection
 
    'prendo la ConnectionString dalla proprietà ADOConnection dalla
    'dll
    Connessione.ConnectionString = LoginCtrl.ADOConnection
    Connessione.Open
 
    'compongo la stringa sql
    strSql = ""
    strSql = "SELECT IDENTIFICATORE, COGNOME, NOME FROM ANA_UTENTI"
 
    Call ComboRecordset(Connessione, strSql, cmbRecset)
 
    'popolo la combo con le righe contenute nel recordset
    Do While Not cmbRecset.EOF
        cmbUtenti.AddItem cmbRecset!identificatore & " - " & _
                          cmbRecset!cognome & " " & _
                          cmbRecset!nome
        cmbRecset.MoveNext
    Loop
 
    cmbRecset.Close
    Set cmbRecset = Nothing
 
    Exit Sub
 
formerror:
    'non apre la connessione al database
    Call MsgBox("Errore:" & Err.Number, vbCritical)
End Sub
_________________________________________________________
Private Sub cmbUtenti_Click()
    Dim strIdentificatore As String
    Dim strUtente As String
    Dim strPos As String
    Dim spdRecset As ADODB.Recordset
 
    On Error GoTo cmbUtentiError
 
    'pulisce la griglia settando il valore massimo delle righe a 0
    spdUtente.MaxRows = 0
 
    strUtente = cmbUtenti.Text
 
    'mi trovo la posizione del primo spazio " " contando da sinistra
    'verso destra
    strPos = InStr(1, strUtente, " ")
 
    'prende dalla stringa "identificatore + cognome + nome" 
    ' l'  indentificatore
    strIdentificatore = Mid(strUtente, 1, (strPos - 1))
 
    strSql = ""
    strSql = "SELECT dt_login, dt_logoff, applicazione FROM t_accessi
                  WHERE identificatore = '" & strIdentificatore & "'"
 
    Call SpreadRecordset(Connessione, strSql, spdRecset)
 
    'evita lo sfarfallamento della griglia disegnandola una sola
    'volta, dopo aver caricato tutti i ricord
    spdUtente.ReDraw = False
 
    'popolo la griglia con tutte le righe del recorset
    Do While Not spdRecset.EOF
        With spdUtente
            .MaxRows = .MaxRows + 1
            .Row = .MaxRows
 
            .MaxCols = 3
 
            .Col = COL_LOGIN
            .Text = spdRecset!dt_login
            .Col = COL_LOGOFF
 
            If Not IsNull(spdRecset("dt_logoff")) Then
                .Text = spdRecset("dt_logoff")
            End If
 
            .Col = COL_APPLICAZIONE
            .Text = spdRecset!applicazione
        End With
 
        spdRecset.MoveNext
    Loop
 
    spdRecset.Close
    Set spdRecset = Nothing
 
    'disegna la griglia, con tutti i record caricati
    spdUtente.ReDraw = True
 
    Exit Sub
 
cmbUtentiError:
    'non carica la griglia
    Call MsgBox("Errore:" & Err.Number, vbCritical)
End Sub
NEL MODULO HO MESSO....
Option Explicit
Public Sub ComboRecordset(ByRef Connessione As ADODB.Connection, _
                          ByVal strSql As String, _
                          ByRef cmbRecset As ADODB.Recordset)
    Set cmbRecset = New ADODB.Recordset
    Set cmbRecset.ActiveConnection = Connessione
    cmbRecset.CursorType = adOpenForwardOnly
 
    cmbRecset.Open strSql
End Sub
_________________________________________________________
Public Sub Cancellazione(ByRef Connessione As ADODB.Connection, _
                         ByVal Comando As ADODB.Command)
    Dim Comando As ADODB.Command
 
    Set Comando = New ADODB.Command
    Comando.ActiveConnection = Connessione
    Comando.CommandText = strComando
    Comando.Execute
 
    Set Comando = Nothing
End Sub
Option Explicit
_________________________________________________________
Public Sub SpreadRecordset(ByRef Connessione As ADODB.Connection, _
                           ByVal strSql As String, _
                           ByRef spdRecset As ADODB.Recordset)
    Set spdRecset = New ADODB.Recordset
    Set spdRecset.ActiveConnection = Connessione
    spdRecset.CursorType = adOpenForwardOnly
 
    spdRecset.Open strSql
End Sub

 End Sub
Non pretendo di insegnare nulla, ho soltanto espresso dei commenti alla
veloce.
Se mi posso azzardare un giudizio, ho visto scritto ben di peggio da gente
pagata piu' di me.
In bocca al lupo.
Ciao
Aldo

Non riesco a scaricare i messaggi, quindi non posso vedere le critiche 
mi sono state fatte, consoderate perň che mi hanno spiegato come 
rendere un interfaccia del tutto indipentende da un modulo...insomma, 
tradotto in due parole...quello che ho scritto = NA' MEZZA SCHIFEZZA!! 
Per ovvi motivi :)) Aspettate quindi che a fine giornata vi faccio 
giudicare una cosa piů corretta, comunque continuate anche a criticare 
questo che ho scritto io.
Saluti natalizi...
-- 
Posted from 212.29.130.175 by way of 
smtp4.libero.it
 [193.70.192.54] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Aldo
Ciaotutti,
Alessandro

 Alessandro
Ciao (e bentornato, visto che non te lo avevo ancora detto)
Aldo