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 op Tumbleweed

Op software.opensuse.org in “Zoek”: “gambas”. Dat biedt verschillende gambas3 paketten; kies IDE voor de volledige programmeeromgeving.

De officiële gambas3 is verkrijgbaar voor Leap 15.2, voor Tumbleweed is de keuze verborgen achter “experimental” en “community packages”.

  • Bij Experimental staat versie 3.14.3, en dat is exact dezelfde als in Leap 15.2, dus zo experimenteel zal die niet zijn (misschien eerder de combinatie met tumbleweed kan ik me voorstellen).
  • Bij community kanje kiezen tussen 3.15.2 op home:munix9 en 3.15.90+git.20210318… op home:munix9:unstable. Die laatste lijkt me pas experimenteel 🙂

Ik kies 3.15.2 van munix9 community, zodat ik toch een nieuwere versie heb dan de stable van openSUSE Leap 15.2, wat nu de gewone openSUSE is.
Er worden 143 packages gedownload voor gambas3.

Er komt een menu bij: Development, met daarin Gambas3.

Updates
24/05/2024
Toestand nu is:
Education (Experimental) : 3.14.3
home:Henry15ea (Community) : 3.18.1
home:munix9 (Community) : 3.19.1
1-click install, gambas.ymp, klik om te installeren.. gambas 3.19.1 is geïnstalleerd in menu Development.

23/04/2022
Ik weet niet of ik hier op hetzelfde toestel zit als bovenbeschrven installatie, maar in ieder geval, bij een update van Tumbleweed krijg ik een melding ivm Gambas:

Problem: problem with the installed gambas3-3.16.1-4.2.x86_64
Solution 1: install gambas3-3.14.3-62.14.x86_64 from vendor openSUSE-Education
replacing gambas3-3.16.1-4.2.x86_64 from vendor obs://build.opensuse.org/home:munix9
Solution 2: keep obsolete gambas3-3.16.1-4.2.x86_64

Ik wil liever de voorheen geïnstalleerde versie 3.16 behouden dan terug te gaan naar 3.14; dus ik kies voor “keep obsolete gambas3-3.16.1-4.2.x86_64″. Het probleem is dat die vraag voor alle gambas onderdelen herhaald wordt, en je dus 100 keer oplossing 2 moet kiezen, maar dat lukt dan wel.
Misschien is er iets in te stellen in het pakketbeheer, om deze gambas te behouden in ieder geval.

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.

Venster met invoer (vraag en antwoord)

Situatie: je hebt een form FMain, en je wil een vraag stellen waarbij je een antwoord verwacht van de gebruiker, dat je nodig hebt voor het verdere verloop van het programma.

Als dat een eenvoudig Ja/Neen of iets dergelijks is, kan je gewoon Message.Question(...) gebruiken; daarbij kan je detecteren welke knop gedrukt is (de waarde komt uit de Message return waarde);

If Message.Question("Really delete from database?", "Yes", "No-Cancel") = 1

– er wordt geteld vanaf 1 (bv 1=”ok” 2=”ok+save”, 3=”cancel”)
– laatste keuze is altijd de “cancel” keuze, is ook default
Antwoord dus bv 1, en daarop reageren via bv SELECT.
Maar als je echt invoer van een woord of tekst hebt, hoe dan?

Ik weet niet of het “de” juiste manier is in Gambas, maar ik loste het zo op:

Ik maak een Form FGetText met enkel
– een tekst voor de vraag (TextLabel)
– een tekstveld voor de invoer (TextBox)
– een sluiten-knop (Button)
En een procedure die public is om de vraag op te geven: setQuestion(s as string) en die in de form die vraag in een TextLabel steekt.

Deze form wordt aangeroepen

Dim sNewFile As String
'
MMain.sGetText = ""
FGetText.setQuestion("New text title or enter for default.txt ")
FGetText.Show
Wait 0.1
While Not FGetText.Closed
' this is where the form works...
Wait 0.1 ' until it is closed
Wend
If (MMain.sGetText) ' this is where the answer is found
' etc.

Als de Form gesloten wordt, geeft die eerst de waarde die ingevuld is door aan een public variabele in MMain. Deze procedure wordt aangeroepen na een “enter of return”, of de textbox nu leeg of gevuld is.

Het programmaverloop kan daar dan de waarde ophalen nadat het venster gesloten is; indien leeg kan een voorgedefinieerde standaardwaarde gebruikt worden.

Ik heb lang gewacht om dit uit te zoeken omdat ik dacht dat er toch een Gambas manier moest zijn om dat anders te doen, en misschien vind ik die ooit nog… maar toch..

Veel plezier..

Tijd vergelijken, berekening met tijd

Als je een berekening moet doen met tijden, gebruik je best de ingebouwde DateDiff.

Bv. :

DateDiff(Settings["SomeTime/Start"], Time(Now()), gb.Minute) / 60

Dit geeft een negatieve waarde als tweede parameter kleiner is.

Fout is de tijd op zich proberen te vergelijken:

IF (Settings[“SomeTime/Start”] > Time(Now()))
IF (Settings[“SomeTime/Start”] > Format(Time(Now()), “hh:mm”))

Deze laatste is dubbel fout want minuten worden niet voorgesteld door mm maar door nn.

Zie ook Rekenen met tijd (dagen).

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