Driver name missing

Een foutmelding in een programma bij het maken van een databankverbinding:

Driver name missing

Er kan wel manueel ingelogd worden vanop de commandolijn met de gegevens zelf (host, gebruiker, ww).

De foutmelding “Driver name missing” betekent normaal dat één van de eigenschappen in het connection object niet gegeven is, nl

connection.name = "mydatabasename" (zie “login” voor user-name). Of wijst “driver” eigenlijk op type: connection.type = "mysql"?)

(ik herinner me vroeger al eens naar een gelijkaardig probleem gezocht te hebben, dat uiteindelijk niets met de driver name, hier “mysql” te maken had – de fout zat elders maar had deze melding tot gevolg.)

Soms heeft het te maken met een verkeerd interpreteren van de al dan niet geïnitialiseerde of open verbinding.

Maar er zijn ook andere omstandigheden waarin deze foutmelding voorkomt, bv:
– je gebruikt een verkeerd connection object, bv lokaal ipv ModuleData (localhost/remote) …
– connection object is niet geïnitialiseerd of gecreëerd: hConnection .login, .password, .host, .name.; als ze uit een config bestand komen, check die inhoud.
– er worden lege parameters gestuurd in het commando dat de database aanspreekt (door missende initialisatie van strings, settings, …)

Andere dingen om te proberen?
– de gegevens van de gebruiker op de server zijn wel aangemaakt maar er zijn geen rechten toegekend op de database. Ook vervelend is als de rechten specifiek op tabellen en zels velden zijn gegeven (of vergeten – of er is een veld bijgekomen enz..).
– de gegevens van de gebruiker op de server zijn wel aangemaakt maar niet geladen (refresh)?
– draait de database server?

compile gambas app van de commandolijn

Compileren: gbc3
Ga in de projectdirectory staan. Tik daar:
gbc3 -a

upd: moet blijkbaar kleine a zijn gbc3 -A

Uitvoerbaar programma:
Het uitvoerbare programma maak je door de bestemming/naam op te geven bij gba3:
gba3 -o ~/mygambasprog.gambas

Link op de desktop etc
zie vorige posts …
Icoon: http://gambas.copyleft.be/blog/archives/112
Werking gambas: http://gambas.copyleft.be/blog/uitvoeren
Source archive uitpakken, compileren en draaien: http://gambas.copyleft.be/blog/archives/148

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/*/
*~

Ongewenst sluiten tegenhouden

Een gebruiker kan per vergissing op het x teken duwen boven in de balk van het venster, als hij bv het venster wil verkleinen of vergroten. Dan sluit de applicatie onherroepelijk af.
Je kan in het Close event wel eindprocedures opnemen die data bewaren en verbindingen sluiten en zo, maar kan je ook de “Close” tegenhouden?

Ja dat kan
Maak ergens een boolean die bepaalt of het venster gesloten (m.a.w. het programma gestopt) mag worden of niet. Je kan die bv zetten als je bepaalde verbindingen of bestanden geopend hebt, processen gestart hebt enz.).
ps: Zorg dat je ook ergens een situatie voorziet dat die teruggezet wordt. Normaal zal dat zijn na het sluiten van die dingen door een normaal eind-bevel, met quit-knop of menu.

Stop Event

MMain
Public bShowHasStarted as Boolean = FALSE ' indicates active use
Public Sub Form_Close()
  If MMain.bShowHasStarted 
    Message.Info("Please stop all processes first (close files, connections etc) ")
    Stop Event
  Else
    doClose()
  Endif
End

Settings[“sSlot/sKey”]=”value”

Terminologie
Een mooi voorbeeld van benoemen van de rubriektitels in het Settings bestand is “slot” en “key”. Slot is de titel, key is de variabele naam. Beiden zijn nodig om de waarde (value) op te vragen.
Ik probeer het bewaren van instellingen door middel van de module “Settings” een beetje te stroomlijnen, vooral in het kader van het bewaren van verschillende databank-toegang omgevingen waarin een gambas3 programma gedraaid wordt: ontwikkeling, test, ingebruik (development, testing, in production).

Veel van het gebruik van “Settings” zit vervat in deze code:

Dim sSlot, sKey as String
'
For Each sSlot In Settings.Keys
  Print sSlot
  For Each sKey In Settings.Keys[sSlot]
    Print sKey & ": " & Settings[sSlot &/ sKey]
  Next
Next

Een klasse kan helpen bij het beheren; bv CDataContext.

(wordt aan gewerkt)

In memorial: Domotiga

Spijtig genoeg voor iedereen die met Gambas3 en Raspberry Pi werkt, is Domotiga al een tijdje verdwenen, ik schat van ongeveer 2015. De website www.domotiga.nl ging ergens in de zomer van 2015 (mei?) over in de site van CyberJunky’s Blog, alter ego van een zekere Ron “RDNZL”, de auteur van Domotiga. Die naam herken je zeker als je op de Gambas mailinglist ingeschreven was, daar was hij erg aktief meen ik mij te herinneren, en daarmee ook een aanwinst voor Gambas gebruikers in het algemeen.
Op CyberJunky vond je nog links naar Domotiga en DomotiYii, maar ondertussen lijkt er enkel een wordpress reklamesite van één of ander netwerk op de domeinnaam domotiga.nl te staan.

Ergens las ik dat de maker van Domotiga zelf overstapte op een ander systeem voor zijn domotica toepassingen (ok, dat klinkt erg onwetenschappelijk) – ik zie op de cyberjunky github pagina allerlei “Home-assistant” werk.. dat terug te volgen is tot december 2016. Home Assistant draait op Python.

Je vindt nog wel resten van Domotiga terug, bv in web.archive.org, waar je op de about pagina kan terugvinden dat Domotiga startte als een eigen versie van ‘Misterhouse”.

De laatste updates aan de Domotiga github repository vermelden (op dit moment) “May 16, 2019”, dus mogelijk draait het hier en daar nog wel…

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

Grafiekenmodule in Gambas

Hoe grafieken tekenen?

Er bestaat, naast SimpleCharts, al redelijk lang een nooit-afgewerkte eigen gambas-module om grafieken te tekenen, “gb.chart”. (nb: niet in OpenSUSE 15.1 default repo (gambas 3.10.0), wel in alternatieve repo community: home:munix9 (bv Gamabas 3.15.1) en ook in 15.2.
Maar daar is weinig documentatie of voorbeeldmateriaal over te vinden. Ik heb nu een (in een oude discussie op forum.gambas.one) een voorbeelprogramma gevonden dat wel inzicht geeft:

ChartTest

  • componenten: gb, gb.chart, gb.form, gb.gui, gb.image
  • Projecttype: normaal
  • 0 modulen, 1 klasse, 1 form, 65 regels code
  • een “data” bestand met 7 lijnen van telkens twee cijfers, met komma gescheiden;

Op de Form is een DrawingArea geplaatst.

Het databestand wordt onmiddellijk in een array van strings geladen.

Chart wordt onmiddellijk aangesproken (dus geen hChart=New Chart of zo..)

De module heeft wel wat mogelijkheden:

  • type grafieken: Area (perc, stacked, symbols), Bars (perc, stacked), Columns (linecombination, stacked, percent), Lines (symbols, percent, stacked), Pie (Offset1, Offset2, Rings), Plots.
  • de titel kan opgegeven worden Chart.Title.Text = , maar geen subtitel (iets kleiner onder de titel)
  • de grafiek schaalt mooi mee in de hoogte en de breedte bij het wijzigen van het venster
  • de achtergrondkleur kan opgegeven worden
  • de horizontale lijnen kunnen aan/af gezet worden Chart.YAxe.ShowIntervalLines=True
  • de grafiekkleuren voor de dataranges kunnen opgegeven worden
  • je kan een legende zetten, met legende titel, en de kleurtjes van de grafiek, met label
  • Als er te veel waarden zijn op X en Y as (bv meer dan 200) worden de waarden van de as over elkaar heen gedrukt en zijn ze niet meer leesbaar. Je kan daarom een soort schaal zetten, bv Chart.YAxe.Step = 10, of je kan de waarden onderdrukken mbv Chart.XAxe.Visible = False (dus niet de X-as wordt onderdrukt maar enkel de weergave van de waarde op die as)

Opmerkingen:

  • het is niet altijd duidelijk waarom iets niet werkt zoals je verwacht: begrijp je iets niet of is dat onderdeel niet klaar? De documentatie en/of de help is niet altijd volledig.
  • Legende: Legend.Position, blijkt standaard 2 maar het is niet duidelijk wat je ermee kan doen; andere (+/- integer) waarden tonen de legende niet, ik dacht bv om ze in het vlak van de grafiek te zetten om plaats te winnen.
  • Geen subtitel
  • Als er veel waarden op een as van het type tekst (of datum) zijn, is het niet mogelijk om er af en toe een af te drukken, je kan ze enkel afzetten. En wat doet Autoscale T/F?
  • de DrawingArea in een Form laat niet toe andere elementen op die form te zetten; bv bovenaan een knop met kleurkeuze of zo, dan valt er onderaan een stuk van de grafiek weg. Misschien zal je dus in je FMain een apart venster moeten oproepen met de grafiek alleen.
  • het zou misschien handiger zijn een object te hebben ipv een module?

Voorbeeld van gebruik met iets meer data: https://sourceforge.net/projects/garlic3/files/Examples/Gambas3Charts/

Gambas 3 en Qt4, Qt5

Geval 1: gb.qt4.ext, qb.gui.qt.webkit
Na updates van mijn OpenSUSE (van 42.3 naar 15.1) werken sommige applicaties die met Gambas3 gemaakt zijn, niet meer.

Het gecompileerde programma, met link op de desktop, lijkt te starten, maar sterft dan een stille dood.

Bij het openen van het project in Gambas3:

Sommige componenten worden gemist: gb.qt4.ext

Het probleem is waarschijnlijk dat er Qt4 specifieke componenten zijn gebruikt, en die zijn nu niet meer aanwezig of verkrijgbaar.

Test:
– project openen, ga verder en negeer de waarschuwingen van missende componenten.
– Project eigenschappen: vink gb.qt5 en gb.qt5.ext aan

Of:
– gb.gui.qt (QT4/QT5 switcher component)

Daarna nog:

Cannot load class “Editor”: Unable to load class file

En:
– gb.gui.qt.webkit (QT4/QT5 WebKit switcher component)

Maar dat blijkt niet alles op te lossen… :

Unknown Control: Editor

Gelukkig had ik 1 nog niet ge-update toestel waarop ik de oude versie kon openen.
Inderdaad werd daar een gb.qt4.ext object “editor” gebruikt dat code in kleur weergaf. Bestaat dat niet in qt5?

Ik denk dat ik in de oude opstelling de waarschijnlijke probleemobjecten zoals qt4 Editor er uit moet schrijven en checken of het dan wel werkt…

Daar zag ik dan in de help dat Editor “deprecated” is sinds 3.8 – “use TextEditor control instead”.

Na de vervanging van die control, en het overschakelen op de algemene gb.gui.qt werkte de applicatie terug.

Geval 2: Dial, LCDNumber, TextEdit, ?

Applicatie omgezet (gambas2 code geïmporteerd in gambas3); geeft een foutmelding op Qt4.ext en werkt niet; de forms bestaan uit tekst met accolades in plaats van een echte form. Ik kan dus in gambas3 ook niets “corrigeren” want ik krijg de form niet open.

Ook hier heeft het te maken met gb.qt4.ext; en die zijn op het nieuwe systeem niet meer aanwezig.

Een tweede fout was

CComponent.Load.626
‘UserControl’ class is missing in gb.form component exported classes
[OK]

en

CComponent.Load.626
‘UserControl’ class is missing in gb.db.form component exported classes
[OK]

gb.qt4.ext
Deze bevat:

  • Dial
  • LCDNumber (vervangen door LCDLabel?)
  • TextEdit

Converteren?
Dé vraag is : kan ik met een recente gambas versie, 3.14.3 bv, (en zonder die qt4 spullen in mijn systeem) dat programma repareren?
Of moet ik op het nieuwe systeem iets als libqt4-devel installeren?

Gelukkig heb ik hier nog een Gambas 3.9.2 op opensuse 42.3 die de oude qt bestanden heeft, en waarin ik het oude programma open krijg. Ik moet daar, veronderstel ik, dan de bovenstaande typische qt4.ext objecten gaan zoeken, die in de code vervangen, en dan opnieuw proberen in het nieuwe systeem … Vermoedelijk zal dat gaan werken als ik op het oude systeem in de IDE de qt4.ext kan uitschakelen in de project-eigenschappen.

(gb.qt4 en gb.qt4-ext af, gb.qt5 en gb.qt5-ext aan).