divendres, 13 d’agost del 2010

Formulari Mestre-Detall amb OpenOffice.org / 02 agost 2010

Formulari Mestre-Detall amb OpenOffice.org

La construcció d'un formulari "mestre-detall", per a presentació o per a introducció d'informació és senzilla de realitzar fent us de
"subformularis" dintre de "formularis".

En un post anterior havia distingit entre diàlegs i formularis. Un diàleg és una interfase gràfica realitzada amb l'editor de diàlegs. un formulari és una interfase gràfica realitzada sobre el document. En el cas de l'OpenOffice.org Base, el formulari és un objecte del tipus Writer però vinculat amb la base de dades.

Això és intressant: quan generarem un formulari amb l'assistent, ens demanarà que el desem. Fixem-nos que el formulari es desa com un .odt (writer). diferent de l'.odb (base). Desem, a continuació, la base de dades.

Ara bé, si examinem el fitxer de la base de  dades .odb (que no és més que un fitxer .zip)  i el comparem amb el fitxer .odt (un altre fitxer  zip) del writer del formulari que veiem? doncs que a l'odb hi ha una carpeta forms dins la qual es troba la mateixa estructura del document writer del form.

Per a Base els formularis es desen conjuntament amb l'odb que conté la definició de la base de dades.

Un cop aclarat això, vaig a fer el mestre detall.

Es diposa d'un assistent per a realitzar formularis del tipus mestre-detall amb l'OpenOffice Base. Aquest assistent ens dona les claus per a realitzar el mateix formulari mestre-detall manualment, o per a realitzar un mestre-detall amb les altres aplicacions (Writer, Calc, Draw o Impress)

És important comprendre que el subformulari és un objecte lògic més que no pas visible. El "navegador de formularis" ens pot ajudar a copsar la idea.

Faré un exemple amb l'assistent, i analitzaré el que s'ha obtingut per tal d'aprendre'n les claus.

El primer de tot és crear una base de dades amb dues taules, una serà la taula mestra i l'altre, la de detall.
Taula1: id (PK, Primary Key, numèric, autoincrement) i valor (text). Serà la taula mestra.
Taula2: id (PK, Primary Key, numèric, autoincrement), idfk (FK, Foreign Key, columna de rel·lació a la taula1), valor, traducció. Aquesta serà la taula de detall.

Informo les dues taules amb dades:




Un cop creades les dues taules, executo l'assistent de creació de formularis: click a "Crear un formulari utilitzant l'auxiliar..."

1. Selecciono les columnes de la taula mestra: taula1 i click a següent


2. Afegeix el formulari. Depenent de les bases de dades sobre les que treballem, podrem triar una relació existent, o bé haurem de sel·leccionar manualment els camps de rel·lació. Click a següent.



3. Indico els camps dels sub-formulari que apareixeran. En aquest exemple, els trio tots. Click a següent.



4. Ara trio els camps de rel·lació entre el formulari mestre (la taula1) i el sub-formulari de detall (la taula2)
Indico que la columna IDFK de Taula2 és FK a ID de Taula1. Click a següent.



5. Trio un disseny de presentació. Click a següent.



6. Li indico quina funcionalitat tindrà el formulari (només lectura, o permetrà afegir, esborrar, modificar...). Click a següent.



7. Finalment trio estil de presentació: colors, controls 3D...  Clik a següent.



8. I li dono nom al formulari: "prova-mestre-detall" i click a "Fi."




Ara puc provar  el formulari. Depenent del tipus de presentació que hagi triat en el pas 5 serà més evident el funcionament. Vist el cost de crear formularis amb l'assistent,  és una bona idea  provar els diferents formats de presentació.

En resum, podem afegir nova informació, esborrar-la..canviar-la. Tot s'aconsegueix automàticament sense haver de programar. No està gens malament.

Si passo al mode de disseny podré veure com funciona. Tanco i deso el formulari. I l'obro per edició



Obro el navegador de formularis



I examinem el navegador de forms




Puc veure que hi han dos formularis: el MainForm que conté dues labels, un camp amb format per a l'ID, un camp de text, i un subformulari SubForm.

En podria crear un altre. Si faig click a MainForm amb el botó de la dreta del mouse puc fer Nou Formulari que serà, en realitat, un nou subformulari. Si faig click amb el botó de la dreta sobre el títol Formularis, en canvi, el que creo és un nou formulari que serà independent. Puc aniuar formularis dins formularis a molts nivells.

El Navegador de formularis és, doncs, una potent eina de disseny. Remarco també que l'estructura de forms i subforms que es manifesta i dissenya en el navegador no té, en canvi, una representació visual. Un form pot ser, doncs, molt complex lògicament, malgrat que potser la seva interfase gràfica no ho sigui gaire.

Però anem poc a poc, si vaig fent click amb el botó de la dreta del mouse als diferents elements que apareixen al navegador de formularis, en puc examinar les propietats.

Així, puc veure com els camps de text estan associats a columnes de les taules de la base de dades, i com es permet o no, l'edició, la creació o l'eliminació de la informació associada.



El més interessant és examinar els formularis. Examino el formulari mestre (MainForm)




i com es vincula el subformulari de detall (SubForm) amb el formulari mestre:



La creació de formularis mestre detall és redueix a crear amb el navegador de formularis

1. primer de tot, tenir unes taules de mestre i detall rel·lacionades.
2. Un formulari mestre
3. Un formulari de detall
4. Vincular cada formulari a la taula corresponent
5. definir les relacions entre els formularis a les propietats de dades del subformulari
6. afegir els camps rel·lacionats amb columnes fent servir la llista de sel·lecció de camps



o bé afegir un control (camp de text, camp formatat, check box, radio button...)  i vincular-lo a través de la seva pàgina de propietats a una columna d'una taula.

El Control Taula (en la paleta de "més controls") en el formulari mestre ens mostra el contingut de la taula, Però si s'ubica en el subformulari es vincula automàticament i ens permet visualitzar d'un sol cop totes les files relacionades en la taula de detall.

Els camps de ListBox i de ComboBox en el formulari de detall, en canvi, no estan preparats par a la vinculació mestre-detall. Es poden carregar amb el contingut d'una taula,o una llista de valors, o el resultats d'una consulta.

Cap comentari:

Publica un comentari a l'entrada