Installatiepakket maken van je Gambas programma

Menu Project / Make / Installation package
of het icoon van de doos, hier helemaal rechts: Install package
ps: Ik kreeg eerst een foutmelding omdat een directory niet (meer) bestond waarin (?) tijdelijke bestanden geschreven worden.

Dan start een procedure in 7 stappen:
(hier ingevuld met vb waarden)

  • 1. Package information name, e-mail maintainer, vendor, Description, Licence …
  • 2. Changes : “initial release”
  • 3. Target distribution: openSuse
  • 4. Package group Productivity/Office/Finance
  • 5. Menu entry: Office/Finance Categories: Finance; Office
  • 6. Destination directory: upload/mijnproject/distribution
  • 7. Ok ; the packages have been successfully created.

Het resultaat zijn in dit geval twee bestanden:

mijnproject-0.0.80-1suse.src.rpm
mijnproject-0.0.80-1suse.noarch.rpm

  • 1. Informatie over het programma en contactpersoon
  • 2. Normaal de wijzigingen tov de vorige versie
  • 3. Alleen de distributies waarvoor je paketten kan maken zijn als keuze beschikbaar.
  • 4. Package group Productivity/Office/Finance
  • 5. Waar in de menu struktuur het programma komt
  • 6. Waar het resultaat moet gezet worden (lokaal – niet installatie)
  • 7. Ze komen in de in 6. opgegeven bestemmingsdirectory.

3.: om bv een Ubuntu pakket te maken op openSuse moet je “debhelper” installeren; in openSuse 10.3 zit dat in de “deb” package.

Een eigen Gambas-2 programma starten

Binnen de programmeeromgeving:

project openen en dan een van de volgende:
– Menu Debug, Run
– F5
– run-knop met als symbool een pijl |>

Vanop de Command prompt:

Een gambas project bestaat uit een map of directory met een aantal bestanden.
Eén ervan is uitvoerbaar (executable zichtbaar als eigenschap x in directory listing met ls -lF) en heeft de naam van het project met als extentie .gambas, bv:

mijnproject.gambas

Het begin van dat uitvoerbaar bestand doet zich voor als shell script en laat zich uitvoeren door de gambas interpreter, hier gbr2.

Het commando head mijnproject.gambas toont het begin van dat bestand:

#! /usr/bin/env gbr2

~ħ8��O�$# Gambas Project File 2.0
Title=Mijnproject
Startup=MMain
Icon=mijnproject.png
Version=0.0.70
Library=gb.qt
Library=gb.form
Library=gb.db

Starten vanuit een Konsole kan bv met:

./mijnproject.gambas

Starten vanuit een grafische desktop werkt daarom niet vanzelf: als je via Konqueror (bestandsbeheer) naar het facs.gambas bestand gaat, en erop klikt, vraagt die “Open met” en toont het menu van “Bekende programma’s”. Je kan dan zelf invullen:

gbr2

Het gemakkelijkste: maak uit de gambas IDE een executable met de ingebouwde tool via:

  • tandwiel icoon “make executable”;
  • Project, Make, Executable”
  • CTRL-ALT-M

dat maakt een link op je desktop aan die de juiste instellingen bevat. De link krijgt het icoon dat je in je project voor je programma koos.

Je kan je uitvoerbaar programma ook opnemen in een menu: KDE Menu Editor, door een nieuw menu-item aan te maken, geef een naam en bij programma command kies je via de bestandsbeheer knop ernaast je “mijnproject.gambas”. Dan wordt niet automatisch je project-icoon toegevoegd; kan via klik op het icoon, andere iconen, browse en dan moet je het icoon ergens apart hebben staan. (het gecompileerde project bevat het maar dat is niet zichtbaar vanuit de bestandsbeheerder)

64-bit Gambas2

Hier op openSUSE 11.0 en KDE 3.5

OpenSUSE vers geïnstalleerd, met updates, en packages (zie onderaan)

Download of via installer, zypper bv.add repository met naam gambasValor:

zypper ar http://download.opensuse.org/repositories/home:/gbvalor/openSUSE_11.0/x86_64 gambasValor

Geeft:

Adding repository ‘gambasValor’ [done]
Repository ‘gambasValor’ successfully added
Enabled: Yes
Autorefresh: No
URI: http://download.opensuse.org/repositories/home:/gbvalor/openSUSE_11.0/x86_64

Foutmelding bij gebruik; url was fout, laatste stuk moet eraf – gefixt via Yast, installatiebronnen.

– Yast, Software Management, search “gambas2”, select, all in this list + autocheck, accept
– 7 extra packages selected, continue
– ok, menu: Development, Gambas

Geïnstalleerde packages lijst: Continue reading

Een Gambas leerboek

Nog een gambas handleiding ontdekt:
Getting Started with Gambas Version 2: A Tutorial
Het werk is van Timothy Marshal-Nichols (aan e-mail adres vermoed ik Brits)

De gevonden versie dateert van 2006, lijkt gemaakt in openoffice.org/odt formaat en bestaat als pdf.
Ik heb maar weinig vermeldingen gevonden, nergens iets over een mogelijke uitgave als boek, en slechts 2 sites met een download:

  • een arabische met de pdf (1.0/193)
  • een heel commercieel uitziende met een zip van een pdf. (niet geprobeerd)

Het boek vertrekt van 3 projecten: SimpleEdit, ImageShow, Notations.

Toetsindruk, KeyPress() verwerken: rekenveld

Rekenveld Form
Een formulier met een veld waar getallen worden ingegeven, en na elk getal (enter) wordt het totaal berekend. Rekenveld Run

Toetsindrukken als “enter” kunnen gevolgd worden in het “log” schermdeel rechts.
Als de “tab” toets ingedrukt wordt, wordt het resultaat naar het Target veld gestuurd.

Hierbij het ontwerpscherm, de code (onderaan) en het aktieve programma.

Gemaakt in Gambas 2.8

PUBLIC SUB vlbxInput_KeyPress()

  SELECT Key.Code
    CASE Key.Enter
      lsbxLog.Add("enter : " & Key.Code)
      CalcResult()
    CASE Key.Return
      lsbxLog.Add("return : " & Key.Code)
      CalcResult()
    CASE Key.Tab
      TransferResult()
    CASE ELSE
      lsbxLog.Add("other : " & Key.Code)
  END SELECT 

END

PUBLIC SUB CalcResult()

  vlbxResult.Value += vlbxInput.Value
  vlbxInput.Value = vlbxResult.Value
  vlbxInput.Select()

END

PUBLIC SUB TransferResult()

  vlbxTarget.Value = vlbxInput.Value

END

De lijn met vlbxInput.Value = vlbxResult.Value afzetten geeft het resultaat alleen in het resultaatveld.

Waarom niet vertaald?

Hoewel heel het project vertaald is en volledig in het NL draait, is een deelvenster FEdit plots helemaal in het Engels. Het verschil met de andere Forms is dat de teksten op het scherm geschreven worden vanuit code :

txtlb.text=”Titel op scherm”

Wordt deze teksttoewijzing in code niet mee aangeboden bij het vertalen?

Upd 26/6: Om teksten in code in de vertaal-lijst te krijgen moet je ze voorzien van extra haakjes:

txtlb.text=("Titel op scherm")

Vertaling: gnu translation tools=?

Project, Translate geeft deze fout:

Vertaling, fout

Over welke packages gaat het hier concreet?
Een zoek naar “gnu translation tools” levert geen resultaat in Yast.

Upd:
Raadpleging op web : het gaat waarschijnlijk over de gettext tools; ik selecteer in Yast2 dus

gettext-tools - Tools for Native Language Support (NLS)

Ok! (zie ook hier)

Databank aanspreken, MySQL query met Exec

Ik las onlangs een commentaar van Benoit Minisini waarin hij (vertaald) zegt:

Doe nooit:

sql = "INSERT INTO klant (naam) VALUES ('" & TextBox1.Text & "')"
res = mDatabase.conn.Exec(sql)

maar doe:

res = mDatabase.conn.Exec("INSERT INTO klant (naam) VALUES (&1)", TextBox1.Text)

Voorbeeld met een nieuw project, graphical application met: DB access.

Table test bevat velden:

  • naam: varchar30
  • opm: varchar20
  • tijd: timestamp
' Gambas class file

PRIVATE sMaxRecs AS String
PRIVATE resQuery AS Result

PRIVATE $hConTest AS NEW Connection

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

WITH $hConTest
.Type = "mysql"
.Host = "localhost"
.Login = "app"
.Password = "test"
.Name = "testtable"
END WITH
TRY $hConTest.Close
TRY $hConTest.Open
IF isTestConnect()
btInsert1.Enabled = TRUE
btInsert2.Enabled = TRUE
btInsert3.Enabled = TRUE
ENDIF

END

PUBLIC SUB isTestConnect() AS Boolean

IF $hConTest THEN
RETURN $hConTest.Opened
ELSE
RETURN FALSE
ENDIF

END

PUBLIC SUB btInsert1_Click()

DIM sSql AS String

sSql = "INSERT INTO test (naam) VALUES ('" & TextBox1.Text & "')"
DEBUG sSql
resQuery = $hConTest.Exec(sSql)
DEBUG resQuery.Available

END

PUBLIC SUB btInsert2_Click()

resQuery = $hConTest.Exec("INSERT INTO test (naam) VALUES (&1)", TextBox2.Text)

END

PUBLIC SUB btInsert3_Click()

DIM sSql AS String

sSql = "INSERT INTO test (naam) VALUES (&1)"
resQuery = $hConTest.Exec(sSql, TextBox2.Text)

END

FMain

form

Run

Run

De code onder knop 1 geeft volgende foutmelding:

Failed

De code onder knop 2 werkt (is gemaakt volgens opmerking boven).

Knop 3 gebruikt string sSql om query toch eerst op te bouwen.

'Om meer dan 1 veld in te vullen code van knop 3 vervangen door volgende:

PUBLIC SUB btInsert3_Click()

DIM sSql AS String

sSql = "INSERT INTO test (naam, opm) VALUES (&1, &2)"
resQuery = $hConTest.Exec(sSql, TextBox2.Text, TextBox3.Text)
END

Ook in een select kan dat gebruikt worden, bv:

sSql = "SELECT tijd FROM test WHERE naam = &1 AND opm = &2"
resQuery = $hConTest.Exec(sSql, TextBox2.Text, TextBox3.Text)
Message.Info(resQuery!tijd)

(kan toegevoegd worden aan knop 3 code)

Gambas2 op openSUSE 11.0 + KDE 3.5

  • Verse installatie van openSUSE 11.0 + KDE 3.5 + online updates
  • Online repository toegevoegd: in Yast2, Repositories, Repository Manager:
    http://download.opensuse.org/repositories/home:/gbvalor/
    in de vorm:
    Protocol: http
    Server: download.opensuse.org
    Directory: repositories/home:/gbvalor/openSUSE_11.0/
    (eigenaardige overgang aan home met dubbel punt maar zo werkte het in ieder geval)
  • Key trusted? – controleren
  • repository toegevoegd en beschikbaar in de lijst.
  • Yast software installatie, search “Gambas”: een hele lijst gambas2*, merk op dat gambas runtime erbij staat. Allemaal aanduiden (helaas manueel? Rechtsklik: “all in this list”)
  • Je installatie-medium (CD/DVD waarschijnlijk) wordt gevraagd
  • Na installatie is het icoon aanwezig in het menu “Development”
  • Op dit moment geeft dat Gambas versie 2.8 geïnstalleerd (terwijl op SF: Last stable version is 2.8.1).

Datum uit een databank: welke vorm?

Ik vul de datum in vanuit een Gambas programma met een string sDocDate die de datum in het formaat “2008-07-31” bevat.

Als ik het record ophaal, eventueel wijzig en terug bewaar, krijg ik echter een lege datum in de databank, waarschijnlijk als gevolg van een foute invoer.

Als ik naar het formaat kijk waarin de datum weergegeven wordt zie ik al het probleem: een andere datumindeling: “07/31/2008”, dus eerst de maand, dan de dag en dan het jaar. (op het scherm met txbxDate.Text= $hInvoice.sInvDate)

Als diezelfde string terug bewaard wordt, of vervangen wordt door een andere onjuiste datum-vorm onstaat een probleem.
Oorzaak is waarschijnlijk de localisatie (US) van het systeem waar ik nu op werk.
Dat valt te voorkomen door de datumstring die je ophaalt om te zetten in een datum en daarna terug te formatteren als datum zoals je die wil:

txbxDate.Text = Format(CDate(FMain.$hInvoice.sInvDate), "yyyy-mm-dd")

Achtergrond: Continue reading