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)