Gambas is reeds lang beschikbaar in Fedora. Niet waar je Gambas zou verwachten, nl in development tools, maar wel te vinden via de zoek mogelijkheid.
Opgelet want als je alleen Gambas zoekt, zitten alle Gambas1 paketten ook in het resultaat.
Gambas staat nadien in het Development menu.
Gambas in Mandriva One 2009
Gambas is in versie 2.8.2 standaard aanwezig in Mandriva One 2009.
Start het Software Management en kies bij Development, Other: Gambas2.
Er komen een paar meldingen maar na alles gewoon te bevestigen is Gambas2 beschikbaar!
Zonder voorbeelden, en met een donkerder blauwe kleur dan ik gewend ben op andere installaties.
Het betreft hier een KDE 4.1, en gambas gedraagt zich een beetje raar; zo is de bestand-openen dialoog wat X-achtig. De letters zien er ook wat raar uit, het lettertype eerder.
Maar een snel gemaakte eenvoudige 1-knop toepassing “test” werkte alvast.
Details over het verloop van de installatie:
To satisfy dependencies, the following package(s) also need to be installed: zie verder
Gambas in Fedora Core 8
In fedora core 8 (ook al in FC5) kan je in software management Gambas kiezen. Helaas is het versie 1, die toch wel sterk verouderd is tegen de huidige 2 (en zelfs 3 in ontwikkeling).
Als Gambas gestart wordt, blijken veel voorbeelden niet te werken. Een form met een knop maken en “run” laat zien dat de omgeving in principe wel werkt, maar als je de keuze hebt, werk dan met Gambas2.
Gambas 2 in Ubuntu 8.10
In de live CD van Ubuntu 8.10 kan je bij “software installeren” al nazien of Gambas 2 nu beschikbaar is.
Kijk bij Add/Remove applications, All available applications, Programming.
Na het installeren vanuit de live CD:
Synaptic Package Manager, Development, Quick Search gambas2.
Gambas installeren was nog nooit zo gemakkelijk.
Gambas werkt echt fantastisch goed, dit is de eerste Gambas-Gnome combinatie die er zo goed uitziet, zelfs met een project dat gemaakt is in KDE.
Database opvraging met result set
Een sterk hulpmiddel voor het opvragen van gegevens uit een databank en verdere verwerking ervan is de “resultset”, de resultaatset van de opvraging. Een opvraging bestaat meestal uit een tekstlijn met een SQL query. Die kan op voorhand opgebouwd worden in een variabele.
Er wordt trouwens aangeraden om eerder de echte variabelen mee te geven als parameters.( zie Databank aanspreken..)
sRequest = "SELECT * FROM &1 LIMIT &2"
TRY myResult = db.Exec(sRequest, "test", "2000")
Met de resultset kan je dan hetvolgende:
- Kijken hoeveel records of resultaatrijen er zijn:
PRINT myResult.Count
- bewegen met de pointer of index:
Die begint te tellen bij 0 en kan gevolgd worden met:
PRINT myResult.Index
Naar een bepaalde rij:
myResult.MoveTo(iRow)
Naar een relatieve rij bewegen met de pointer: eerste, laatste, volgende, vorige
myResult.MoveFirst()
myResult.MoveLast()
myResult.MoveNext()
myResult.MovePrevious()
Een veld uit het huidige record aanspreken:
PRINT myResult!fld_name
Omdat het een “enumerable” resultset is hoef je zelf niet te tellen, maar kan je FOR EACH gebruiken:
FOR EACH myResult
PRINT myResult!fld_id & " - " & myResult!fld_name
NEXT(als de databank-tabel de velden fld_id en fld_name bevat )
- De inhoud van een veld opvragen om in te vullen in bv een TableView:
TableView1.Data.Text = myResult[sVeldnaam]
Extra interessant zijn de “subcollecties”: bv de beschikbare velden:
myResult.Fields[]
Die zijn “enumerable”: dwz te gebruiken met FOR EACH. Je moet wel een “tellervoorwerp” hebben; bv een veld.
DIM myField AS Field
FOR EACH myField in myResult.Fields
‘ …
NEXT
Voorbeeld:
PUBLIC SUB fillLsbxTableFieldsForEach() ' ' try to make a better fillListbox by using enumerated type ' DIM iInd AS Integer DIM sTableAndFields AS String DIM hField AS Field DIM hTable AS Table ' DEBUG "Database:" & lsbxDatabases.Current.Text WITH $hConDb .Name = lsbxDatabases.Current.Text END WITH $hConDb.Close $hConDb.Open TRY $hRes = $hConDb.Exec("SHOW TABLES") IF ERROR Message.Error(Error.Text, "ok") ELSE DEBUG $hRes.Count $hRes.MoveFirst lsbxDbTables.Clear FOR EACH hTable IN $hConDb.Tables '[$hRes[Str($hRes.Fields[0].Name)]] WITH hTable DEBUG .Name sTableAndFields = .Name & "=" END WITH FOR EACH hField IN hTable.Fields WITH hField 'DEBUG .Name sTableAndFields &= .Name & "+" END WITH NEXT lsbxDbTables.Add(sTableAndFields) NEXT ENDIF ' END
Upd 3/11/2010: index start op 0.
Hoe een shell commando uitvoeren
Er zijn 2 mogelijkheden om commando’s naar het systeem te sturen:
EXEC en SHELL
EXEC start een extern process. | SHELL start een extern command in een shell. | |
Bij EXEC geef je de parameters allemaal als parameter mee. | Bij SHELL geef je een string met het hele commando mee. | |
EXEC [ "ls", "-la", "/tmp"] WAIT |
SHELL "ls -la /tmp" WAIT |
|
EXEC wordt uitgevoerd in ? |
SHELL wordt uitgevoerd in /home/usernameGebruik bv Application.path & "/this.txt" voor een bestand dat in het Gambas programma-pakket zit (directory) Test bv met DIM sReturnValue AS String |
Parameters meegeven naar Form
In het voorbeeld Database (voorbeelden inbegrepen in Gambas) wordt zo informatie doorgegeven naar een opgeroepen form:
' Gambas class file PRIVATE $hConn AS Connection '...... PUBLIC SUB btnRun_Click() DIM rData AS Result DIM hForm AS FRequest rData = $hConn.Exec(txtRequest.Text) hForm = NEW FRequest($hConn, rData) hForm.Show CATCH Message.Error(DConv(Error.Text)) END
De regel
hForm = NEW FRequest($hConn, rData)
geeft een Connection en een Result object mee.
Die worden opgevangen in de _new method van de aangeroepen form:
' Gambas class file PRIVATE $hConn AS Connection PRIVATE $rData AS Result '.... PUBLIC SUB _new(hConn AS Connection, rData AS Result) $hConn = hConn $rData = rData ' ... END
en omgezet in eigen variabelen (de $hConn is twee keer PRIVATE).
Kan misschien ook/anders door een aparte ModCommon te maken en daarin PUBLIC te declareren.
Broncode verzameling (sourcecode printen)
Dit artikel is in 2008 gemaakt voor Gambas versie 2!
Versie 3 heeft een andere plaats voor zijn bestanden!
De broncode van de schermen zit in de bestanden met de uitgang .class, als je de naamgeving systematisch doet beginnend met F__ of Form___. De layout van het scherm is ook tekst en zit in dezelfde naam met uitgang .form. De code van modules heeft extentie .module en zit in M___.module
Broncode is pure tekst en kan in bestandbeheerder preview bekeken, of in Kate geopende worden.
Afdrukken van de broncode gaat niet vanuit gambas. Wel vanuit Kate (bv met regelnummering aan).
Of in OOo Writer, eventueel na het samenvoegen van de broncode van de verschillende forms en modules.
Verzamelen van de broncode in 1 bestand:
(class en modules)
(zie shell script hieronder) Continue reading
Listbox: bovenste item selecteren?
Ik probeerde het bovenste element van de listbox te selecteren bij het openen van het scherm en het vullen van de lijst, met:
maar dat werkte niet zo …
lsbxInvoice.Current.Selected = ..
Een listbox is een lijst met n elementen; bv 15 elementen.
De elementen worden genummerd en kunnen aangesproken worden met een index.
Het eerste element in de lijst heeft index nummer 0, dus het laatste n-1.
Vb element[0] .. element[14].
Een listbox wordt gevuld door de methode “Add”, eventueel aangevuld met de plaats waar de toevoeging moet gebeuren.
bv
lsbxInvoice.Add("001-aankoop")
lsbxInvoice.Add("001-aankoop", 0)
Na het vullen van de listbox kan het bovenste element geselecteerd worden door de index te zetten:
lsbxInvoice.Index = 0
Op deze manier kan bij het openen van het scherm een element van de lijst geselecteerd worden.
Volgorde tabs wijzigen in tabstrip?
Veronderstel dat je een tabstrip in elkaar stak zoals op de afbeelding. Maar nu is er een probleem; je wil dat gebruikers terechtkomen in de “algemene” tabstrip General. Helaas staat die achteraan, en de eerste wordt geopend.
- Klik de “properties” kant van het scherm open (rechts) als dat nog niet gebeurd is. Klik bovenaan op Hierarchy. Daar zie je de onderdelen apart staan. Helaas zijn ze niet te selecteren om de volgorde te veranderen…
- Ook klikken en slepen in de GUI gaat niet.
Oplossing gevonden:
Muiscursor boven het tabblad, rechtsklik; kies “Move tab”: “first” / “previous” / “next” / “last”, …