OpenOffice.org Basic: Form per accedir a una BD registrada
En el post anterior accedia a una base de dades a través d'una macro i un diàleg. Ara accediré a la base de dades registrada posant la interfase d'usuari en un formulari.Depenent de l'aplicació, Write, Draw, Impress, Calc o Base, hi hauran algunes diferències petites.
En cas de triar Write, Draw, Impress o Calc, poso els controls directament sobre el document.
En cas de triar Base, he de crear un objecte de formulari de la base de dades. I sobre aquest objecte poso els controls.
Visualitzo la paleta controls de formulari i la paleta de disseny de formulari. Si no els tinc actius, faig Visualitza-Barres d'eines i activo Controls de Formulari i Disseny del Formulari.
Em poso en mode de disseny (fent clic al botó mode disseny de la paleta de disseny de formulari).
Poso un camp de text: Fent clic amb botó de la dreta sobre el camp, obro la finestra de propietats del control. AL control li poso el nom TextMostrar i indico que és multilínea
Poso tres botons. els anomeno BotoCarregar, BotoNetejar i BotoSortir i respectivament tenen les etiquetes "Carregar", "Netejar" i "Sortir".
Li dono nom al Formulari. Ara que ja tinc controls sobre el document, el botó formulari (situat a la paleta de disseny del formulari) ja estarà actiu. Faig clic i s'obre la finestra de propietats del formulari i li en dic FormulariProves1
Creo el codi. Com sempre això es fa amb Eines->Macros->Organitza les macros->OpenOffice.org BASIC. En aquest cas, associo el codi de les macros al document Writer, Calc, Draw o Impress segons el cas. Es dir: el codi de les macros es guarda en el fitxer del document.
Si hagués triat fer-lo a "les meves macros" / Standard, la macro es guardaria a la carpeta de macros del meu directori home. En el meu cas, OpenOffice.org 3.2 sobre Ubuntu 10.04 Lucid Lynx, a la carpeta/home/albert/.openoffice.org/3/user/basic/Standard
El codi de les macros per a Writer, Draw, Impress i Base és en tots els casos el mateix:
REM ***** BASIC *****
' variables globals
' La DrawPage
Dim dpDrawPage As Object
' El Formulari
Dim Formulari As Object
' El camp de text
Dim TextMostrar As Object
Sub Main
AccedeixBD
End Sub
Sub AccedeixBD
' obre la base de dades actual i fa una inserció de dades
Dim Context
Dim DB
Dim Conn
Dim Stmt
Dim Result
Dim strSQL As String
Dim sText as String
' BasicLibraries.loadLibrary("XrayTool")
' crea el context de BD
Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
'obté la BD
DB=Context.getByName("proves-sqlite-01")
' obté la connexió
Conn=DB.getConnection("","")
' crea una statement
Stmt=Conn.createStatement()
' crea string amb query
strSQL="SELECT * FROM Taula1"
' executa i obté a un ResultSet
Result=Stmt.executeQuery(strSQL)
' neteja la text box
Neteja()
sText = TextMostrar.Text()
While Result.next()
sText = sText & "id: " & Result.getInt(1) & "; valor: " & Result.getString(2) & chr(13)
Wend
TextMostrar.Text = sText
' tanca la connexió
Conn.close
End Sub
Sub Neteja
' obté la DrawPage, el component en el que es dibuixen els controls
dpDrawPage = ThisComponent.getDrawPage
' un cop té la drawPage, obté el formulari per nom
Formulari = dpDrawPage.Forms.getByName("FormulariProves1")
' i del formulari, obté el control, també per nom
TextMostrar = Formulari.getByName("TextMostrar")
' fa servir els mètodes i propietats del component.
TextMostrar.Text=""
End sub
Sub Sortir
' Amb Close(True) tanca l'aplicació
ThisComponent.Close(true)
End sub
Associo
procediment AccedeixBD a BotoCarregar
procediment Netejar a BotoNetejar
procediment Sortir al botó BotoSortir
Per a calc, cal tenir en compte que un mateix document pot tenir moltes fulles i que cada fulla pot tenir un formulari. Aleshores, com he posat els components a la primera fulla, cal fer aquest tractament diferent
' obté la DrawPage, el component en el que es dibuixen els controls
' en el cas del writer, draw, impress i base, directament de ThisComponent,
' en cas de calc, cal primer obtenir la sheet
dpDrawPage = ThisComponent.Sheets.getByIndex(0).getDrawPage
' la resta és igual ' un cop té la drawPage, obté el formulari per nom
Formulari = dpDrawPage.Forms.getByName("FormulariProves1")
' i del formulari, obté el control, també per nom
TextMostrar = Formulari.getByName("TextMostrar")
' fa servir els mètodes i propietats del component.
TextMostrar.Text=""
És dir, per a Writer, Draw, Impress i Base obtinc DrawPage (la capa de presentació de l'OpenOffice.org, per entendre'ns) directament del ThisComponent
dpDrawPage = ThisComponent.getDrawPage
En cas de Calc, hi ha una capa intermitja, la col·lecció de fulles. N'he de fer servir la primera que és on he posat els controls.
dpDrawPage = ThisComponent.Sheets.getByIndex(0).getDrawPage
Finalment, com tancar l'aplicació des d'una macro:
ThisComponent.Close(true)
Vet aquí el HelloWorld dels formularis amb OpenOffice.org
Cap comentari:
Publica un comentari a l'entrada