.. _db: ************ Database: db ************ L'oggetto **db** permette di interrogare il database *Access* e recuperare i dati. db.name ======= Definisce il nome del database Access. Estensione predefinita: *mdb*. db.table ======== Definisce il nome della tabella [#]_ che contiene i dati. Interrogazione di tabelle generiche =================================== db.sql ------ Eseque la query SQL specificata sul database. Restituisce un *array* contenete i record trovati. Ogni record è un *hash* dove i nomi dei campi costituiscono le chiavi. .. code-block:: ruby :linenos: banca = db.sql("SELECT * FROM campione WHERE cod_filiale=2109").first filiale = db.sql "SELECT * FROM db_filiali WHERE id = #{banca[:id]}" Interrogazione di tabelle "a matrice" ===================================== Le tabelle *a matrice di dati* in formato *Access* generate da `pTabs `_ contengono i dati delle tabelle statistiche in un formato definito da campi fissi indipendentemente dai pannelli o dal tipo di tavole prodotte. Per esempio questi record della tabella Access: .. image:: _static/matrix.png :width: 600pt corrispondono a questa tavola (in rosso le *coordinate* della matrice): .. image:: _static/matrix_flag_excel.png :width: 600pt db.matrix --------- Imposta il valore del campo ``matrix``. Rimane impostato per tutte le query successive fino ad una nuova istruzione ``db.matrix``. E' utile quando la tabella contiene dati con valori diversi di *matrix*. db.stratum ---------- Imposta il valore del campo ``stratum``. Rimane impostato per tutte le query successive fino ad una nuova istruzione ``db.stratum``. db.find e db.finds ------------------ Trovano rispettivamente un record e più record. ``finds`` permette di specificare il numero di record attesi. Per ``find`` il numero di record attesi è *1*. Se il numero di record non è quello atteso, viene generato un errore. L'interrogazione viene definita concatenando una serie di metodi che specificano i valori da ricercare nei campi e termina con il nome della variabile della tabella da restituire o con ``all`` per restituire i record completi di tutti i campi. Di default i dati sono limitati agli item della variabile di riga con esclusione dei net e del totale di riga. .exp ^^^^ Specifica un frammento di istruzione WHERE SQL. .mtr ^^^^ Specifica i valori per il campo ``matrix``. Sovrascrive per la sola query corrente un eventuale valore impostato dal comando ``db.matrix``. .str ^^^^ Specifica i valori per il campo ``stratum``. Sovrascrive per la sola query corrente un eventuale valore impostato dal comando ``db.stratum``. .tab ^^^^ Specifica i valori per i campi ``table`` e ``subtable``. Si può indicare anche un solo argomento. .row ^^^^ Specifica i valori per i campi ``rvar`` e ``rid``. Si può indicare anche un solo argomento. Come valore di ``rid`` si può specificare un numero, un range (``1..5``) o un array (``[2,6]``). .stat ^^^^^ Specifica il valore del campo ``stat``. * ``.stat(:count)`` può essere abbreviato in ``.scount``. * ``.stat(:summary)`` può essere abbreviato in ``.ssum``. .wn ^^^ Restituisce anche i net. .wt ^^^ Restituisce anche il totale di riga. .n ^^ Limita la query ai soli net. .col ^^^^ Specifica i valori per i campi ``cvar`` e ``cid``. Si può indicare anche un solo argomento. Come valore di ``cid`` si può specificare un numero, un range (``1..5``) o un array (``[2,6]``). Se non specificato, la query restiduisce i dati relativi ai totali di colonna. .. .ctot .. ^^^^^ .. Limita la query al totale del pannello. Equivale a ``.col('.tot')``. .all ^^^^ Restituisce tutti i campi del record. .nome_campo ^^^^^^^^^^^ Restituisce solo il campo indicato. .labs ^^^^^ Restituisce le etichette di riga. .slabs ^^^^^^ Restituisce le etichette di riga per le statistiche *summary*. Esempi ------ .. code-block:: ruby :linenos: db.find.tab(:d5n).row(1).ctot.cpct # restituisce la percentuale di colonna a totale per l'item 1 della tabella 'd5n' db.finds.tab(:d5n).ctot.cpct # restituisce le percentuali di colonna a totale di tutti gli item della tabella 'd5n' db.finds(4).tab(:d5n).ctot.cpct # ... controlla inoltre che gli item restituiti siano 4, altrimenti genera un errore db.find.tab(:d1).row(0).ctot.all # restituisce tutti i campi del record db.finds.tab(:d1).row([2,4]).ctot.rlabel # etichette dei codici di riga 2 e 4 db.finds(5).tab(:d1).row(1..5).labels # etichette dei codici di riga da 1 5 db.finds(5).tab(:d1).exp("rid>0").labels # etichette dei codici di riga maggiori di 0 # un istruzione "eccessivamente" completa db.find.data("AB745","ALL").tab(:d5n,1).row(:d5,0).col('.tot',1).stat(:count).count Sequel ====== `Sequel `_ è il *Database Toolkit for Ruby* utilizzato per interrogare il database. Alcuni metodi permettono l'accesso diretto ad alcune funzionalità e oggetti di *Sequel*. db.conn ------- Restituisce la connessione al database. db.model -------- Restituisce il dataset della tabella. db.filter --------- Da accesso al metodo ``filter`` del dataset. .. rubric:: Note .. [#] E' necessario specificare il nome della tabella se si sta usando un report *a matrice di dati* creato dal programma `pTabs `_.