+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

Parametrizzare una query

  1. #1
    gualtiero non è in linea Novello
    Utilizzo 5/6 query : con una estraggo tutto, con un'altra solo un determinato
    Fornitore, con un’altra ancora un determinato fornitore di una determinata
    Località e così via.
    Vorrei sapere se è possibile avere una sola query che funziona a secondo dei
    parametri che vengono passati ed eventualmente come può essere congegnata
    questa query.
    Grazie !!
    Gualtiero

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Dipende in quale modo imposti i parametri della WHERE e come 'richiami' la query.
    Ogni sviluppatore ha i propri metodi, se mostri il codice che usi tu possiamo meglio consigliarti.

    Io, ad esempio, uso sempre una classe CSql in cui tengo tutte gli enunciati delle query.
    In questo modo posso utilizzarli da qualsiasi parte del programma.

    Facendo un'esempio ' al volo' la query per caricare gli articoli potrebbe essere più o meno così :
    Public Function CaricaArticoli(Optional ByVal p_IDCategoria As Long = -1, Optional ByVal p_IDFornitore As Long = -1) As String
        Dim sSQL As String 
        sSQL = "SELECT <elenco_campi> FROM " & TB_ARTICOLI
    
        Select Case True
        Case (p_IDCategoria > -1) And (p_IDFornitore > -1) 
            sSQL = sSQL & " WHERE IDCategoria = " & p_IDCategoria
            sSQL = sSQL & " AND IDFornitore = " & p_IDFornitore
        Case (p_IDCategoria > -1) 
            sSQL = sSQL & " WHERE IDCategoria = " & p_IDCategoria
        Case (p_IDFornitore> -1) 
            sSQL = sSQL & " WHERE IDFornitore = " & p_IDFornitore
        End Select
    
        CaricaArticoli = sSQL
    End Function
    
    e la uso così:

    Dim sSQL As String
    Dim rsArticoli As ADODB.Recordset
    Se rsArticoli = New ADODB.Recordset
    
    sSQL = cSQL.CaricaArticoli(-1, IDFornitore)
    rs.Articoli.Open sSQL, CN, <opzioni>
    
    ℹ️ Leggi di più su gibra ...

  3. #3
    gualtiero non è in linea Novello
    sSQL = "SELECT <elenco_campi> FROM " & TB_ARTICOLI
    <elenco_campi> sono tutti i campi della tabella Articoli ?
    e in As Long = -1) As String
    cosa significa esattamente -1)
    Grazie

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da gualtiero Visualizza il messaggio
    sSQL = "SELECT <elenco_campi> FROM " & TB_ARTICOLI
    <elenco_campi> sono tutti i campi della tabella Articoli ?
    No, sono i campi che voglio gestire nel recordset.
    Normalmente non si usa mai SELECT * (anche se troppe volte viene indicato così sul web) perchè è inutile caricare campi che non servono, e soprattutto caricarli tutti! In realtà ciò occorre raramente e solo in specifici casi.

    Sarebbe come consegnare una pizza utilizzando un camion quando sarebbe bastato il motorino!
    (affermazione presa da un libro sull'accesso ai dati.) ,
    per poi lamentarsi che la query è lenta.



    Quote Originariamente inviato da gualtiero Visualizza il messaggio
    in As Long = -1) As String
    cosa significa esattamente -1)
    In genere nelle mie tabelle io definisco i campi ID (IDArticolo, IDCliente, etc.) di tipo Long.
    Ora, come sappiamo, se nella firma della funzione un parametro è qualificato come Optional significa che può essere omesso.
    Però, dato che passo un valore numerico anche se omesso avrebbe comunque il valore 0, il che a volte potrebbe non essere quello che voglio perchè ad esempio in una determinata tabella è previsto anche un ID con valore=0.

    Quindi, per evitare ogni problema preferisco sempre impostare il valore di default del parametro a -1, così non sono costretto a ricordarmi se in quella determinata tabella i valori partono da 0 oppure da 1.

    ℹ️ Leggi di più su gibra ...

  5. #5
    gualtiero non è in linea Novello
    Grazie per l'ottima spiegazione.
    Ora vedo di mettere in pratica tutto e testare che
    la nuova query funzioni perfettamente in relazione
    ai vari parametri : se ci fossero problemi mi faccio
    risentire.

  6. #6
    zabbia non è in linea Novello
    Grazie infinite
    Ultima modifica di zabbia; 13-05-2011 14:40 

  7. #7
    gualtiero non è in linea Novello
    Ho due errori nel mettere in pratica quanto detto in precedenza
    Se rsArticoli = New ADODB.Recordset
    sSQL = cSQL.CaricaArticoli(-1, IDFornitore)
    Se rsArticoli è Set rsArticoli ?
    cSQL dove viene definito o dove deve essere definito ?
    Grazie

  8. #8
    L'avatar di gibra
    gibra non è in linea Very Important Person
    - Prima devi creare la classe

    Dal menu Progetto -> Inserisci modulo di classe seleziona Modulo di classe

    e ti crea il file Class1.
    Nella finestra Proprietà modifica il nome da Class1 a clsSQL
    e poi salvi il file con nome: clsSQL.cls

    - Ora devi creare dichiarare l'istanza della classe e poi crearla:
    in un modulo BAS del tuo progetto (esempio modMain.bas) dichiara la classe:

    Public CSql As clsSQL

    poi nella sub Main() di modMain.bas o nel tuo form di avvio crei l'istanza:

    Set CSql = New clsSQL

    - Adesso puoi usarla.

    Apri la finestra di codice di clsSQL e ci crei le funzioni che ti servono.

    Quando poi ti occorre utilizzare una funzione, potrai chiamarla scrivendo:
    sSQL = CSql.

    nota che appena avrai digitato il punto (.) l'intellisense di fornirà l'elenco delle funzioni che hai precedentemente creato nella tua classe clsSQL, quindi selezioni quella che ti serve.

    ℹ️ Leggi di più su gibra ...

  9. #9
    gualtiero non è in linea Novello
    Premetto che non ho mai utilizzato una classe e visto che per utilizzare una
    query parametrata dovrei far uso delle classi ho cercato di documentarmi in
    internet sul metodo e sulle proprietà delle stesse, ma non ho trovato (forse
    non ho cercato bene) nulla che potesse spiegarmi il da farsi.
    Quindi ho creato come suggerito la classe clsSQL, ma non so quali funzioni
    inserire.

  10. #10
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quelle che servono a te.
    Come quella che ti ho scritto come esempio nel mio primo post.

    Prima di documentarti su internet, hai consultato la guida MSDN di VB6 che dovresti avere installata sul computer?
    Oppure qui:
    Visual Basic 6.0


    ℹ️ Leggi di più su gibra ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 6
    Ultimo Post: 21-01-2019, 16:23
  2. Risposte: 7
    Ultimo Post: 23-06-2015, 15:14
  3. Risposte: 13
    Ultimo Post: 04-10-2010, 16:13
  4. [ACCESS 2007] Parametrizzare filtri di selezione records
    Da hawk50 nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 31-03-2010, 16:53
  5. Parametrizzare nome Form per ciclo
    Da dolcissimo nel forum Visual Basic 6
    Risposte: 21
    Ultimo Post: 18-09-2008, 14:15