Newsgroup: it.comp.lang.visual-basic
Titolo: [!]Dibattito sulle QUERY

Volevo lanciare un dibattito sulle query ed i criteri di ricerca in VB.
Per il programmatore sono un vantaggio od uno svantaggio?
Sono io che sono un cane ad implementarle in VB oppure e' effettivamente
complicato se si ha a che fare con tabelle complicate.
Io mi ritrovo sempre piu' con query dalle dimensioni impressionanti che
riesco con fatica  a gestire nel codice.
Sono io che lavoro artigianalmente? Oppure e' proprio complicato? 
Esistono degli strumenti avanzati per crearle in VB?
Se avete qualche idea sara' ben gradita!
ciao
		maxx



Io le creo in access, poi copio il testo SQL nella clipboard e lo
incollo nel codice VB, eventualmente aggiungendo delle modifiche.
Credo che facciano tutti cosě, č il modo piů semplice per scrivere una
join complessa senza diventare scemi.
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "zz" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "zz" from e-mail address to write me (spammers...)
--------------------------------------------------------------------

 join complessa senza diventare scemi.
                  .scrivo.
                 .
                .
               .
              .
             .
            .
           .
          .
         .
        .
       .
      .
Sotto.
--
Ciao.
Maurizio

		maxx

>Esistono degli strumenti avanzati per crearle in VB?
Ti ringrazio per la domanda, come si dice in televisione. A parte gli scherzi ogni tanto qualche discussione generale fa piacere.
Secondo me oggi il miglior metodo per scrivere le query e' quello di utilizzare il DataEnvironment del VB6.
Caratteristiche:
- usa ADO, ultimo nato, indipendente dal database; la stessa query funziona su Access o su DB2 Mainframe (... beh magari e' meglio provarla);
- si connette al database e recupera la struttura delle tabelle, campi, etc;
- ti permette di comporre graficamente la query;
- la connessione e le query sono viste come oggetti dell'applicazione (come se fosse un form);
- le query in particolare sono viste come metodi del tuo oggetto DataEnvironment; se la query ha dei parametri essi sono i parametri del metodo;
- il recordset aperto e' un attributo del tuo oggetto DataEnvironment.
- puoi eseguire stored procedure;
- puoi impostare tutte le opzioni per l'esecuzione della query: tipo di cursore, di lock, etc.
Vantaggi:
- tutte le query sono in un unico posto e facilmente modificabili, hanno un loro nome, loro parametri, etc; in una parola sono gestite in modo professionale;
- non si scrivono le query a mano o con il copia incolla;
- le query scritte sono indipendenti dal database;
Svantaggi:
- non supporta le query dinamiche (tipo un filtro basato su delle condizioni variabili)
- la query aperta imposta un recordset che e' un oggetto della connessione ed in questo modo non posso ad esempio aprire un recordset come variabile locale di una procedura (su questo punto non sono sicuro che non ci possa essere una soluzione alternativa, ad esempio sicuramente si potra' creare una connessione al volo, ma non ho analizzato bene il problema).
Antonio

Antonio
Ciao!
Luca Menegotto.

>fatto traboccare il vaso e che mi ha convinto all'abbandono.
Esagerato. Appena trovo la soluzioine te lo dico :-) solo che in questo periodo non ho vb6 instalatto!
Antonio

Bene, Bene! 
Una bella discussione!!
Specifico meglio la domanda (vi manipolo nel mio interesse :-)
Supponiamo di avere 10 tabelle da cui devi pescare dei dati.
L'utilizzatore puo' scegliere dei parametri o dei criteri di ricerca
attraverso l'interfaccia grafica (TextBox, ComboBox, CheckBox e
quant'altro). Puo' anche fare scelte multiple oppure nessuna scelta.
Al momento attuale ( cioe' col mio pessimo metodo di lavoro) devo
procedere come segue:
sql="SELECT * FROM tabella1 WHERE ID in (" & array() & " ) And nome='" &
Text1 & "' ORDER BY nome " & iif(option1(0),"ASC","DESC")
e questo e' un caso semplice.
Se devo combinare i dati di piu' tabelle utilizzando piu' parametri
ottengo righe di query difficili da comprendere e mantenere.
Non sembre filtrare le funzioni utilizzando i recordset e' pratico ( ad
es.  se voglio collegare un DbGrid ad una query...) 
Su questo avete qualche spunto o idea???
grazie ancora
 
 		maxx

>es.  se voglio collegare un DbGrid ad una query...) 
In che senso?
Antonio

>poi ho tutto sotto mano!!
Il compito principale di MTS e' di racchiudere in un'unica transazione piu' oggetti COM che agiscono su diverse risorse e farle sottostare ad una transazione piu' grande: unico commit o unico rollback.
Se l'interfaccia utente e' solo il browse non devi distribuire nulla (ovviamente).
Dispendio di tempi pari a 1/10000? Stiamo impazzendo o cosa? Ma chi e' che ha scritto sta c....ta?
Rispetto a chiamare delle stored procedure hai di mezzo COM. Se il componente lo installi dove hai anche il server del database COM puo' chiamare il server senza appesantire la rete. Se invece hai deciso di metterlo su un'altra macchina vuol dire che avevi problemi di prestazioni e quindi hai verificato che e' meglio quella strada.
Le stored procedure, comunque, non sono assolutamente paragonabili alla flessibilita' di COM sotto tutti i punti di vista.
Gli oggetti COM possono essere scritti con molti linguaggi, possono fare tutto quello che puoi fare tramite un programma, sono indipendenti dalla posizione (possono stare sul tuo PC, oppure su un PC dall'altra parte del mondo), etc.
Antonio

), etc.
Scusa, ma non ti seguo...... le stored procedures in particolare e il
linguaggio SQL in generale sono specifici alla manipolazione dei dati,
sono nati e vengono mantenuti per quello. Cos'e' che puoi fare,
riguardo alla manipolazione dei dati, con COM e che non puoi fare con
SQL?
Nota peraltro che se vuoi accedere ai dati, COM o non COM, comunque
l'SQL lo devi conoscere. Allora, a quel pnto, meglio conoscerlo fino
in fondo, no??
Ciao!
Luca Menegotto.
PS. Visto che ta diventando una cosa privata, che ne dici se la
continuiamo fra noi???

 Antonio
--

>ed aggiungere "a mano" ogni record.
OK, ma non ho capito cosa c'entri con il Data Envronment.
Antonio

Non ho parlato io di Data Environment!!!
Io ho aperto un dibattito sull'uso delle query nei programmi!
Cosa c'entri DE me lo deve dire chi ne ha parlato :-)
ciao
			maxx


>Non ho parlato io di Data Environment!!!
Si, scusa ma ho fatto confusione. Quello che non mi e' ancora chiaro e' la frase che hai detto un paio di messaggi fa:
"Non sempre filtrare le funzioni utilizzando i recordset e' pratico ( ad es  se voglio collegare un DbGrid ad una query...) "
Cosa intendi dire? Puoi associare ad un dbgrid un recordset gia' aperto. Ho capito?
Antonio