Databank toegang aanpassen aan situatie

Databank toegang
Ik gebruik van in mijn Gambas programma een databank (type mysql/mariadb), waarvoor ik over het netwerk inlog naar de databank.
Ik moet de instellingen ergens bewaren; Gambas heeft daarvoor zijn “Settings” in een configuratie-bestand. Daarin bewaar ik server-adres, login, wachtwoord en databanknaam. Mijn toepassing kan verschillende databanken aanspreken, ik noem die “datasets”

Dataset
De dataset situeert zich op een server en heeft zelf als eigenschappen dat ze een naam en een omschrijving heeft.
Voorbeeld van enkele datasets die ik gebruik:

  • pers : personeelsdossiers
  • reg: tijdsregistratie (tikklokken)
  • crm: klantengegevens-databank
  • gitin: it-inventaris

De korte naam wordt intern gebruikt, bv in programma’s en documentatie.

Andere server?
Terwijl ik de applicatie ontwikkel, wil ik niet op de “goede” databank werken, om die data niet te beschadigen, eventueel is dat ook een andere server.
Ik kan andere instellingen gebruiken (bewaard in het configuratie bestand).

Ontwikkel-test-gebruik
Op het moment dat ik wil testen op de goede data, moet ik ofwel het configuratie bestand verwisselen voor een andere versie, of – en dat zou nog handiger zijn – omschakelen in mijn toepassing zelf. In mijn programma zou ik moeten kunnen kiezen voor de databanken van de ontwikkeling, die om te testen, of de echt gebruikte databank “in productie”.

Onderweg – ter plaatse
Die drie verschillende “omgevingen” noem ik de DataContext. Die DataContext kan ook nog verschillen op een andere manier: als ik op mijn laptop werk, offline van mijn productieomgeving, wil ik een lokale kopie op de “localhost” gebruiken (en moet ik daar gemakkelijk naar kunnen overschakelen). Als ik dan op het werk kom, schakel ik over naar de productie-databank, dus hier zijn het eerder verschillende “situaties”.

DataContext
Ik wil dus omschakelen tussen
* Voorbeeld 1:

  1. mobiel (laptop met localhost server)
  2. ter plaatse (server op netwerk)

* Voorbeeld 2:

  1. ontwikkeling (“development”)
  2. test
  3. in gebruik (“in production”)

Instellingen
In mijn instellingen wil ik dus voor een verbinding de combinaties kunnen maken van de datacontext en de dataset (“DataContextX-Dataset”, ofwel de “Connection” gegevens).
Datacontext-Dataset
In het config bestand ziet dat er zo uit:

[DataContext0-Crm]
host="server.domain.tld"
login="myname"
password="qsdljfsdfjqsdljjdsqf"
database="crm"

Ik kan heel flexibel een andere verbindings-combinatie maken voor mijn laptopwerk:

[DataContext1-Crm]
host="localhost"
login="myname"
password="oupotykhlvkhsjhf"
database="crm"

Om aan te geven waarvoor de DataContext0 of DataContext1 staat, definieer ik dat ook in de instellingen:

[DataContext0]
Name="production"
Description="Ter plaats op het werk"


[DataContext1]
Name="mobile"
Description="laptop localhost kopie databank"

En ook over de datasets kan ik die informatie bijhouden:

[DataSet]
Pers="personeelsgegevens"
Reg="tijdsregistratie"
Crm="klanten bestanden"

De dataset kan in een module of library gedefinieerd zijn als constante string:

ModCrm
Public csDATASET as String = "Crm"
Public hConData as Connection
...

Het bewaren in de instellingen en het terug ophalen kan je systematisch doen door daar een “libary” DataContext voor te maken, waardoor dat ook altijd op dezelfde manier gebeurt, en met dezelfde syntax. De library maak je in Gambas als library project, en als uitvoerbaar programma kan die als libarary gebruikt worden in een ander project.

CDataContext
De klasse CDataContext moet aanbieden:
– nieuwe datacontext maken (met naam en beschrijving gegeven)
– nieuwe dataset maken (met naam en beschrijving)
– opvragen van de beschrijving van een gegegven dataset of datacontext
– context kiezen/instellen (vanaf dan wordt gekozen context gebruikt als “huidige”)
– bewaren van nieuwe instellingen voor een datacontext, dataset en connection
– verbinding maken met de databank van een gegeven dataset voor een gegeven connection (met “huidige” context)
– opvragen van allerlei informatie over de bewaarde verbindingen, bv of een bepaalde bestaat, hoeveel er zijn, of de lijst van …

Niet voldoende argumenten / Not enough arguments

Situatie: Bij het proces van het integreren van een library die voorheen gemaakte eigen classes moet vervangen, treedt deze fout op.

We krijgen geen regelnummer bij de fout.

1. Klasse
Onderaan zien we aktief:

FMain.@new.0

De hele MMain (opstartklasse) wordt doorlopen zonder probleem (stap voor stap gecheckt met breekpunten).

Vanuit MMain wordt FMain gestart, dan treedt het probleem op. Er zijn wel een aantal variabelen zichtbaar in de foutopsporing, dus een stukje van FMain lijkt te lopen, maar met breekpunten is het niet uit te zoeken: zelfs een breekpunt op de eerste lijn geeft toch al een fout bij het uitvoeren van FMain.

Het probleem leek verdwenen na het verwijderen van de klasse die ook in de library zit.

2. Methode
Deze keer ligt het aan een methode in de gebruikte klasse; die is ooit hermaakt geweest en er moest een methode met de nieuwe naam gebruikt worden: bv “loadConnection” en “makeConnection”.
De oude bestond nog maar werkte niet correct.

3. Declaratie

In een module staat:

Private hDayReq As New CDayReq

“AS NEW” vervangen door aparte declaratie en initialisatie, waardoor je de fout ziet bij de initialisatie (bv daar moest nog een waarde aangeleverd worden als argument).

Private hDayReq As CDayReq
'
hDayReq = New CDayReq("A")

Als de initialisatie niet expliciet gebeurt, maar bij het eerste gebruik van deze module/classe, dan krijg je enkel een summiere foutverwijzing naar de module, maar niet naar de lijn in de module waar de fout vandaankomt.

De impliciete initialisatie met AS NEW gebeurt voor alle gedeclareerde objecten als één ervan gebruikt wordt, niet noodzakelijk hetgene waarvan de initialisatie een fout heeft.

Projecteigenschappen auteurs en beschrijving

Project “Authors” en “Description”

Bij Projecteigenschappen zie je:

Project type (normaal/bibliotheek/component)
Verkoper ("vendor")
Versie ("version)
Titel ("title")
Beschrijving ("Description")
Auteurs ("Authors")

Deze twee laatse leken me handig om te gebruiken voor, bv, het About scherm. Maar ik vond nergens een manier om ze op te roepen. Ze worden bewaard in het bestand .project, maar kunnen niet opgevraagd worden met Application.Description of Application.Authors.
Volgens Benoît Minisini komen ze alleen voor in de broncodeversie van het project, in de “project configuration file”. Ze worden niet meegenomen naar het uitvoerbare .gambas programma. (mailinglist 09-2021)

Dan lijkt het dus eerder bedoeld voor de programmeurs, niet voor de gebruikers van het afgewerkte programma. Ik vraag me nog af of het een goed idee is om hier dan programmeurs commentaren in te zetten, of moeten we rekening houden met een toekomstige update waarbij dit de standaardvelden worden voor auteurs en beschrijving?

Het mysterieuze uitroepteken in library of bibliotheek beschrijving

Bij Project, Eigenschappen, Bibliotheken: selecteer een bibliotheek (of voeg één toe).

Eigenschappen onder bibliotheeknaam zijn:

– Locatie: /home/loginname/.locql/share/gambas3/lib/vendorname/libname:0.0.gambas
– Voorziet in: CContract, CEmp!, CReqProc, CReqState!, ...

Vanwaar die uitroeptekens achter de naam van sommige klasse/modules?

(in de Engelstalige versie is het Project, Properties, Libraries, provides:…)

Antwoord (van gambas mailing list)

  • ! betekent dat de klasse statische symbolen heeft (“An exclamation mark means that the class
    has static symbols.”)
  • ? betekent dat (ipv Export) “Export Optional” is gebruikt. (“There is also a question mark suffix for classes declared with “Export Optional”)

Concreet: als je in een klasse het volgende zet:

STATIC sStaticString AS String = "Statische variabele"
of
PUBLIC CONST cConstString AS String = "Constante"

.. krijg je dus dat uitroepteken achter de naam van de klasse.

ps
Library versie verandert niet
Als je uittest met twee gambas IDE’s naast elkaar open, met een waar je de library maakt, en een ander waarin je die gebruikt, moet je de omgeving van die laatste afsluiten en terug openen om de juiste library gegevens te zien in oudere Gambas v. 3.7.1.
Zoniet blijf je daar altijd het library versienummer zien van toen je de IDE opende in Project, Libraries (zelfs als je de library verwijdert en terug toevoegt, houdt ze oud nummer en Provides gegevens).
De programma’s die je in de IDE start gebruiken echter wel de ondertussen ge-update library!

Incorrect overschreven in klasse

De foutmelding die in Gambas3 kan optreden als je een module of klasse hebt gemaakt met een methode die al voorkomt, bv in een bibliotheek die je opgenomen hebt in het project (eigenschahppen):

ModuleData.AddRecord” is incorrect overschreven in klasse “ModuleData

Engels: … is incorrectly overridden in class …

Hier is
– “ModuleData” een module in het geopende project; kan ook een klasse Class zijn ipv Module.
– AddRecord: een voorbeeld van een methode in die klasse, en die blijkt een probleem te geven (dubbel voorkomen).

Soms kan de oorzaak zijn dat je eerst klassen in je programma had die je nadien in een bibliohteek (library) hebt ondergebracht, en je hebt de klasse nog niet verwijderd. Check de library (in project eigenschappen, Bibliotheken; als je op de bibliohteek (leverancier, naam, versienummer) klikt, zie je onderaan de locatie en een opsomming van waarin die library voorziet).

Of omgekeerd, dat je een klasse bijmaakt die al bestaat in een geïmporteerde library.

Gambas3 na update opensuse 15.2

Vanuit Leap 42.3 – vanuit Leap 15.1

Vanuit Leap 42.3

Een werkend systeem op openSUSE Leap 42.3 is na een reeks upgrades tot openSUSE Leap 15.2 gekomen. Helaas lijkt gambas3 nu niet meer te werken. Op de desktop merk je gewoon dat de IDE niet start. Bestaande programma’s, gemaakt in gambas, blijven wel werken.

Op de commandolijn starten:
gambas3
gbx3: unable to find startup file

Dit verschijnsel zagen we vroeger al eens:
http://gambas.copyleft.be/blog/archives/1290

De oplossing is gelijkaardig; gambas3-gb-jit ontbreekt en moet bij-geïnstalleerd worden (of/ook gambas-ide).

Dat duurt maar een paar seconden… en de Gambas3 (IDE) start weer.
Continue reading

Gambas 3 openSUSE Leap 15.2

Bv via software.opensuse.
https://software.opensuse.org/package/gambas3

Dit (3.14) is een relatief nieuwe versie van Gambas3, in vorige versies van Leap was 3.10 de officiële versie. (Zie “Unsupported distributions”)
Je kan ook een nog nieuwere 3.15 installeren uit
home:munix9 Community: 3.15.2

(Wil je ook de IDE om zelf te programmeren? Dan moet je specifiek gambas3-IDE zoeken, ofwel nadien bij softwarebeheer de IDE bij-installeren; daarbij worden dan alle andere nodige gambas3 onderdelen afgehaald.)

Een klik op Direct install opent

Yast2 – 1 Click Install – ruby.ruby2.5

gambas3 installation
“gambas3”
BASIC interpreter under Linux

Gambas is a development environment based on a BASIC interpreter with
object extensions, similar to Visual Basic. With Gambas, you can
design program GUIs, access MySQL or PostgreSQL databases, control
KDE applications, translate your program into many languages, create
network applications, build RPMs of your apps automatically.

Bevestigen..

“Proposal”

If you continue, the following changes will be made to your system:
Repositories to be added:
http://download.opensuse.org/distribution/leap/15.2/repo/oss/ (openSUSE:Leap:15.2)
Note:

You will remain subscribed to these repositories after installation.
Software to be installed:
gambas3

Next..

“Perform Installation…”

Software installation
Installation was successful

Klaar.

Of niet?
In het KDE menu, onder development zie je nu gambas3 staan.
Als je er op klikt, en er gebeurt niets, dan heb je waarschijnlijk niet de IDE geînstalleerd, maar enkel de runtime om gemaakte gambas programma’s te kunnen draaien.

In softwarebeheer zoeken naar gambas3-ide uitkiezen en bevetigen, en alle bijhorende gambas3 onderdelen, en andere extra paketten nodig voor softwareontwikkeling bevestigen en installeren. Dat kan oplopen tot bv 133 paketten in totaal.

Packages
Installed Packages: 133
akonadi-server-sqlite, bison, bison-lang, dpkg, dpkg-lang, gambas3-devel, gambas3-gb-args, gambas3-gb-cairo… (more)
Statistics
Elapsed Time: 01:47
Total Installed Size: 239.86 MiB
Total Downloaded Size: 65.86 MiB

Veel programmeerplezier.

Gambas en git

Gambas maakt in de laatste versies gebruik van git, en toont dat ook in zijn IDE.
Ook bij de ontwikkeling van Gambas3 wordt git gebruikt. Een overzicht op:
https://gambaswiki.org/wiki/howto/git

Maar Gambas bestaat van voor git, en als je git gebruikt met een Gambas project rijst de vraag:
Welke bestanden moet je opnemen in git?

Bij het werken met git kies je welke bestande je onder git toezicht zet, en lokale bestanden die niet nodig zijn voor de ontwikkeling bij een andere programmeur, hoeven niet/mogen niet mee opgenomen worden in git. Sommige daarvan zijn ook onzichtbare bestanden/directories.

Gambas zelf (sinds 3.6) maakt een .gitignore bestand aan, dat git vertelt wat moet genegeerd worden. Daarin bv .gambas, wat de gecompileerde versie is van je project (die zet je altijd beter buiten je projectdirectory want anders wordt die ook mee ingepakt als je een export .tar.gz maakt vanuit de IDE.

Ook andere dingen moeten niet meegaan: de .directory bv, die KDE gegevens bevat.

Voorbeeld van een .gitignore: versie5 , oudere versie1 en .gitignore van Gambas3 zelf …

Huidige (upd 09/2021):

#---- Gambas files to ignore (v5)
*.gambas
.lock
*~
core
core.*
vgcore
vgcore.*
.kdbg*
.*.prof
.lang/*.pot
.gambas/*
.settings
.startup
.list
.info
#----
.directory
.icon.png

Waarbij

  • .directory en .icon te maken heeft met kde, niet met Gambas
  • ~ zijn meestal tijdelijke hulp of backup bestanden, bv van de editor
  • .lang/*.pot heeft te maken met de vertaling van je project
  • .settings: heb ik al ondervonden als vervelend als die in de git repo terechtkomt omdat er ook “eigen” instellingen in staan als de vensters die je open had, plaats waar jij de executable zet (met de naam van je /home/user/..) enz.
    .project komt niet voor in de .gitignore, maar die bevat ook zo’n lokale instelling: SourcePath=/home/username/…

De .gitignore van het Gambas project zelf:

Makefile
Makefile.in
libtool
ltmain.sh
stamp-h1
warnings.log
.deps/
aclocal.m4
config.guess
config.log
config.sub
configure
install-sh
autom4te.cache
config.h
config.h.in
config.status
config.cache
compile
depcomp
missing
/m4/libtool.m4
/m4/ltoptions.m4
/m4/ltsugar.m4
/m4/ltversion.m4
/m4/lt~obsolete.m4
.libs/
*.la
*.lo
*.o
*.a
.dirstamp
*_moc.cpp
*.pot
*.mo
*.gambas
main/gb*/gb*3
DISABLED*
.startup
.settings
.info
.list
.action/
.jit/
**/.gitignore
app/other/MakeWebSite/gambas.sourceforge.net/*/
*~

Object-eigenschappen aanspreken

Ik ontdekte een niet backward-compatible verschil tussen Gambas3 versies:

In Gambas 3.14:

With Chart
  .BackGround = Color.Yellow  
  .Title.Text="Titel"
  With .XAxe
    .MinValue = 300
    .MaxValue = 900
  End With
End With

In Gambas 3.9:

Voorgaande code geeft een fout in Gambas 3.9: “Geen object in FMain:29”
Regel 29 bevat de geneste aanspreking van objecteigenschappen: With .XAxe
Die moet vervangen worden door With Chart.XAxe

With Chart
  .BackGround = Color.Yellow  
  .Title.Text="Titel"
  With Chart.XAxe
    .MinValue = 300
    .MaxValue = 900
  End With
End With