Bestaan globale variabelen in Gambas?

Volgens de tip of the day zijn er geen globale variabelen in Gambas. Je kan wel op hoogste niveau een variabele declareren en die gebruiken; ofwel vanuit de hoofdmodule (main module):
PUBLIC myGlobalVar
ofwel vanuit het hoofdscherm (FMain):
PUBLIC STATIC myGlobalVar

Om ze te gebruiken vermeld je de modulenaam:
ModMain.myGlobalVar
FMain.myGlobalVar

Wat ik ook al gezien heb is een aparte module waarin de variabelen komen die je gemeenschappelijk nodig hebt:
ModCommon.myGlobalVar

Rolluik: ComboBox als afrol-lijst (Drop-down list)

ComboBox De Combobox lijkt het meest op een gewone “drop down list” of rolluiklijst.
Toch gedraagt hij zich niet zo. Als je op de lijst klikt gaat die niet open, maar krijg je een “carrot” of cursor in het woord “ComboBox1” (knipperend vertikaal streepje).
De enige plek waar je de lijst kan doen openklappen is het pijltje rechts ernaast, en dat is in verhouding een klein vlak.
Om de hele oppervlakte op een klik te laten reageren met openklappen van de keuzelijst kan je het gedrag van “mousedown” definiëren:
Rechtsklik, Events, MouseDown brengt je in de code onder PUBLIC SUB ComboBox1_MouseDown() van de combobox. Voeg daar de “Popup” toe:

PUBLIC SUB ComboBox1_MouseDown()
ComboBox1.Popup()
END

Wil je de lijst nog “gevoeliger” maken kan je in plaats daarvan de lijst al laten openklappen als het pijltje er voorbijkomt:

PUBLIC SUB ComboBox1_enter()
ComboBox1.Popup()
END

Hoe je die lijst terug laat “inklappen” als je niet geselecteerd / geklikt hebt, heb ik niet gevonden.
(misschien met de _leave methode?)

Meer dan 1 waarde terugkrijgen uit functie

Een functie geeft normaal geen, ofwel 1 waarde terug. De waarde kan een boolean zijn voor gelukt/niet gelukt, of het resultaat van een berekening of bewerking op getallen of tekst.

Als de functie meer dan 1 waarde moet teruggeven, kan je een array vullen met de waarden.

Of zoals Benoît zelf voorstelt:

I think the better is using an array of Variant, or better an anoynmous array:

FUNCTION DoSomething(Name AS String) AS Array
DIM FirstResult AS ...
DIM SecondResult AS ...
' Do something
RETURN [FirstResult, SecondResult]
END

Op deze manier kan je tot 63 resultaatwaarden teruggeven.

Bad dimension error bij run: waar zit de fout?

run Na een hoop veranderingen vraag ik een “RUN” en het programma eindigt met de foutmelding “bad dimension”.
Error Bad dim
Spijtig genoeg geeft Gambas deze keer niet aan waar de fout zich voordoet. Normaal kom je in de source code op de plaats van de fout te staan na een foutmelding die de fout beschrijft Normale foutmelding.
Als ik terug op run druk (om het programma voort te zetten), crasht het.error crash

Ik probeer de laatste veranderingen ongedaan te maken, maar het zijn er helaas nogal veel en ik vind daar de fout niet mee.

breakpoints Je kan dan “breakpoints” zetten in je code om het programma tot daar te laten lopen. Ik probeer met breakpoints in PUBLIC SUB Form_Open() van de main form (Forms, FMain) omdat de fout zich voordoet bij het uitvoeren van het programma alvorens ik ergens klik of iets “doe”. In dit geval haalt het niets uit; eender waar ik de breakpoints zet, ik blijf dezelfde foutmelding krijgen.

Je kan dus geen breakpoints zetten in de initialisering van variabelen bovenaan in de Form, voor de eigenlijke instructies beginnen. Je kan wel gemakkelijk een ' zetten vooraan de lijn, om de lijn om te vormen in “commentaar”, waardoor ze dus niet meer wordt gebruikt door het programma. De foutmelding kwam niet meer voor nadat ik een array uitge-comment had: PRIVATE aBookType AS NEW String[0, 0]. Inderdaad dimensie dus; door de foutmelding beter te lezen had ik het kunnen weten. variabelen

Current objects
Een andere mogelijkheid is kijken naar de variabelen na het afbreken van het programma. Onderaan in het tabblad “Current Objects” heb je een lijst met variabelen. Daar stond de foute variabele niet bij, .
Wat dus niet gaat is dimensie nul: PRIVATE aBookType AS NEW String[0, 0]
wat wel gaat: PRIVATE aBookType AS NEW String[1, 1]

kopieer-plak fout (copy-paste crash)

2 x Gambas open (twee keer de hele applicatie gestart).

In de eerste Gambas heb ik een bestaand project open, waaruit ik enkele dingen wil kopieren naar de andere FMain.form.

Gambas, select listbox, copy, schakel over naar andere Gambas, rechtsklik plak: ok

Schakel terug naar eerste Gambas.

Select lcdNumber, copy, switch to other Gambas, rightclick paste:

Gambas2
This application has raised an unexpected error and must abort

Component missing.
FForm.CreateControl.1060

Veroorzaakt doordat het nieuwe project als graphic maar niet als QT project was gestart – het is een typische QT-component.

Toevoegen: Project, properties, “gb.qt” – incompatible met gb.qui – afgezet
en “gb.qt.ext” : daarin zitten de ronde draaiknop en de LCD cijfers.

2 x Gambas open.

In first Gambas I have an existing app to copy from FMain.form.

Gambas, select listbox, copy, switch to other Gambas, rightclick paste: ok

switch back to first Gambas, select lcdNumber, copy, switch to other Gambas, rightclick paste:

Gambas2
This application has raised an unexpected error and must abort

Component missing.
FForm.CreateControl.1060

Caused by missing components in the project. The second, new Gambas environment was started with a new project, with different selection of components: Type graphical application instead of QT graphical application.
The LCD controls are typical for QT.

Solved the problem by adding the components:

Project, properties, gb.qtincompatible with gb.qui – switched off

and gb.qt.ext : this contains these LCD numbers.

Om een beetje universeler te werken kan je die componenten beter vermijden blijkbaar.

Gambas 2.2 op openSuse 10.3

gambas in menu Installatie van Gambas huidige versie 2.2.
(geeft met 1.9 apps: “version too old, recompile the project”)
Systeem:

  • openSuse installatie 10.3 (KDE 3.5.7) voorzien van updates tot 1/3/08.
  • Standaard installatie KDE met aantal devel packages (zie detail in volledige artikel)
  • oss en non-oss online repositories
  • gambas van: ftp://ftp.gwdg.de/pub/linux/misc/suser-gbv/rpms/10.3

Geïnstalleerd uit distro:

  • autoconf, automake
  • gcc, gcc++
  • make
  • qt3-devel
  • kdevelop3, kdelibs*
  • kdewebdev
  • poppler, poppler-devel, poppler-qt4
  • perl, pcre, pcre-devel
  • openldap2, -client, -devel
  • curl, libcurl-devel
  • mysql client (en server indien geen andere mysql-server beschikbaar), libmysqlclient-devel
  • unixodbc
  • libxml2, -devel, -++, libxslt, -devel
  • zlib, -devel, glibc
  • SDL -devel, -sound, -mixer, -image –devel
  • Mesa, -devel
  • libpng – devel
  • libjpeg – devel
  • daaruitvolgend automatisch aalib-devl, cyrus-sasl-devel, glibmm2, libsigc++2, libsmpeg0, physfs, …

Volgens http://gambas.sourceforge.net/ zijn er openSuse packages: “NO but yes, thanks to Guillermo”

sudo zypper ar ftp://ftp.gwdg.de/pub/linux/misc/suser-gbv/rpms/10.3 gambasSuse

* Adding repository ‘gambasSuse’
Repository ‘gambasSuse’ successfully added:
Enabled: Yes
Autorefresh: Yes
URL: ftp://ftp.gwdg.de/pub/linux/misc/suser-gbv/rpms/10.3

zypper -v install gambas2

Dan ging een en ander mis.
* Een tweede keer dit aangevuld:

/var/cache/zypp/raw/gambasSuse: Required file is missing: ./setup/descr/packages

Die is zeker wel aanwezig … (op de server. Maar niet in mijn zypper cache. Er gaat blijkbaar iets mis en er wordt alleen een deel van de files afgehaald naar de cache. Ik haal ze manueel af met
wget -r ftp://ftp.gwdg.de/pub/linux/misc/suser-gbv/rpms/10.3
En maak een selectie die ik naar de
/var/cache/zypp/raw/gambasSuse
directory kopieer. (als root)
Dan terug installatie commando, en

The following NEW package is going to be installed:
gambas2-2.2.1-2.gbv.suse103.i586 (gambasSuse2)

Overall download size: 8.5 K. After the operation, 0.0 B will be freed.
Continue? [yes/no]: yes

* Installing: gambas2-2.2.1-2.gbv.suse103 [100%]
CommitResult 1 (errors 0, remaining 0, srcremaining 0)

maar helaas geen gambas2 te vinden, en zypper -if gambas2 geeft:
Information for package gambas2:

Repository: gambasSuse2
Name: gambas2
Version: 2.2.1-2.gbv.suse103
Arch: i586
Installed: Yes
Status: up-to-date
Installed Size: 0 B
Summary:
Description:

Installed Size lijkt me wat weinig … dus Yast2 opgestart en daar “gambas” gezocht; er is een hele reeks gambas2 aanwezig, en alleen “gambas2” zelf staat aktief. Ik kies alle andere gambas2 paketten ook en bevestig. Volgende bijkomende paketten duiken op:
libffi42, libsvg, lirc, omniORB, postgresql, postgresql-libs, tv-common, v4l-tools.
Daarna is Gambas2 inderdaad aanwezig in het menu (met icoon):
KMenu/Development/Integrated Environment/Gambas2
Start mooi op, er zitten veel voorbeeldprojecten bij; ik probeer het bijgeleverde voorbeeld van de muziekspeler. Het start op “readonly” en werkt perfect!

* Even nog de eerste keer: Bij het ontbreken van libffi en libffi-devel stel ik vast dat de openSUSE DVD niet alles van de OSS repository bevat. Dus moet je die ook toevoegen aan de installatie-bronnen: protocol, server, directory:
http:// download.opensuse.org/ distribution/10.3/repo/oss/

gambas2-gb-qt-kde-html geeft probleem van missende:
libXext.so.6
liblCE.so.6
libSM.so.6
libX11.so.6
libqt-mt.so.3
libDCOP.so.4

Ik schakel voorlopig gambas2-gb-qt-kde-html uit *, en kies wel alle andere delen van gambas (uit de online repo), behalve gambas2-gb-vb (visual basic compatibility).
Daarbij worden nog volgende dependencies automatisch toegevoegd:
libsvg, lirc, mysql, omniORB, tv-common, v4l-tools
Yast: installatie ok.
Deze keer komt Gambas ook in het KDE-menu, onder Development, Integrated Environment, met een lelijk, onscherp icoon.
Je vindt ander iconen in /usr/share/gambas2/icons/, het logo piepklein in /usr/share/gambas2/help/tree/img/, en de grote achtergrond-garnaal in /usr/share/gambas2/help/, en Gambas2 start van daaruit op als Gambas 2.2

(*) dit blijkt een vergissing te zijn. Veel applicaties** werken niet in Gambas2, met de foutmelding: cannot load component gb.qt.kde: cannot find library file
(andere werken wel, als het drag-n-drop voorbeeld, of het mysql database voorbeeld)

Yast, gambas2, gambas2-gb-qt-kde-html bijgeinstalleerd zonder dependencies-problemen.

Gambas werkt nu goed voor de voorbeelden met
** kate (Automation, Kate browser)

gambasIDEopensuse

MySQL statements uitproberen

MySQL is even in de aandacht geweest wegens de aankoop van het moederbedrijf
MySQL AB door Sun. Hopelijk blijft het de basis van vele handige vrije software projecten.

Vanuit verschillende toepassingen kan je MySQL databank ondervragen met SQL statements.
Meestal is het handig om ze op voorhand uit te proberen.
Daarom: opslaan in een bestand, en het bestand laten uitvoeren.

Begin het bestand bv met het openen van de database:

USE mijngegevens_db;
SELECT * FROM mijntabel WHERE afdeling = "afd1";

Bewaar in een tekstbestand getMyData.sql

Vanop de mysql command prompt:
source getMyData.sql

Wil je de resultaten niet alleen over het scherm zien rollen maar ook nadien ergens terugvinden, doe dan op de mysql command prompt een “tee” alvorens de vraag te laten uitvoeren:

tee mysqlresultaat.txt
source getMyData.sql

In het tekstbestand mysqlresultaat.txt vind je het commando terug en het resultaat eronder.

Als je een aantal sql-vragen moet stellen met steeds een klein verschil in de vraag, bv telkens een andere maand, afdeling, .. kan je de sql-vraag in een tekstbestand plakken, kopieren naar het aantal totale vragen, en het ene stukje veranderen dat nodig is.

USE mijngegevens_db;
SELECT * FROM mijntabel WHERE afdeling = "afd1";
SELECT * FROM mijntabel WHERE afdeling = "afd2";
SELECT * FROM mijntabel WHERE afdeling = "afd3";

(Daar kan OOo Calc ook mee helpen; vult waarden aan bij kopieren).

Je kan dan de hele set sql-vragen tegelijk laten uitvoeren.

Telkens je iets doet wordt het bijgeschreven in het resultatenbestand.
Dat kan handig zijn omdat je zo een log hebt. Je kan het inderdaad
ook gebruiken terwijl je op de mysql command prompt werkt, om de resultaten nadien te bekijken, of de sql vragen te hergebruiken.

In bovenstaand kan je de verschillende bestaande afdelingen vinden met:

SELECT DISTINCT afdeling FROM mijntabel

die je dan weer zou kunnen gebruiken in een sql statement …

Gambas 2.0 is officieel uit.

GambasTweePuntNul Na drie jaar ontwikkelen is de nieuwe versie van Gambas, 2.0 nu officieel uitgebracht.
Er zijn al vertalingen van in Frans, Japans, Zweeds, Italiaans, Spaans en Catalaans.
Vorige versie 1.0 is nog beschikbaar, maar zal niet meer verder onderhouden worden.
Het origineel Engelstalig artikel bevat meer info en een Engelstalige changelog.

Het programmeren in 2008 kan beginnen…

Info gambas.sourceforge.net/ + download source