MySQL db, verbinding, datarecords ophalen

In het algemeen zijn er 2 mogelijkheden:

  • hDB.Exec(…) waarin gewone SQL statements worden gebruikt; komen terug via resultset.
  • gebruik van Gambas database functies

Hier met MySQL db op locale server dbserver en database “gambase”

PUBLIC db AS NEW Connection
PUBLIC FUNCTION mkdbconnection AS Boolean
  db.close
  db.Type = "mysql"
  db.Name = "gambase"
  db.Host = "dbserver.iglo.loc"
  db.Login = "gambasapp"
  db.Password = "echtpassw"
  db.Open
  RETURN TRUE
  CATCH
  Message.error("Mislukte DB verbinding: " & error.text)
  addLog(error.Text)
  RETURN FALSE
END

Programma tegelijk gebruiken op een “test” databank en een “productie” databank door inbouwen van een schakelaar:

PUBLIC db AS NEW Connection
PUBLIC FUNCTION mkdbconnection(inProduction AS Boolean) AS Boolean
  IF (inProduction = TRUE) THEN 
    db.close
    db.Type = "mysql"
    db.Name = "gambase"
    db.Host = "dbserver.iglo.loc"
    db.Login = "gambasapp"
    db.Password = "echtpassw"
    db.Open
    RETURN TRUE
  ELSE 
    db.close
    db.Type = "mysql"
    db.Name = "testdb"
    db.Host = "dbserver.iglo.loc"
    db.Login = "gambasapp"
    db.Password = "2test"
    db.Open  
    RETURN TRUE
  ENDIF
  CATCH
  Message.error("Mislukte DB verbinding: " & error.text)
  addLog(error.Text)
  RETURN FALSE
END
...

Upd 02-02-2022:

Nu zou ik Public hConn As New Connection gebruiken.

Eens de verbinding gemaakt, kan je informatie over de db opvragen via het connection object, bv over de databank (waarvoor je een databank object declareert):

DIM hDb As Database
.
FOR EACH hDb in hConn.Databases
  PRINT hDb.Name
NEXT

Hetzelfde kan je doen met Tables van een database:
(als je in het connection object een database “Name” hebt opgegevens):

DIM hTable As Table
' en verder ergens
FOR EACH hTable IN hConn.Tables
  PRINT hTable.Name
NEXT

Databankopvraging:

Gebruik parameters met &nummer om waarden door te geven:

DIM sSql AS String
DIM resResult AS Result

sSql = "SELECT * FROM db WHERE fieldname1 LIKE &1 AND fieldname2 LIKE &2"

resResult = $hConnection.Exec(sSql, fieldvalue1 & "%", fieldvalue2 & "%")

Ik geloof dat je vanaf gambas versie 3 iets speciaals moet doen als je boven 9 gaat, ipv :

&10

&{10}

Resultaat van databankopvraag verwerken:

IF resResult
  FOR EACH resResult
    cmbxResults.Add(resResult!recordfield)
  NEXT
  RETURN TRUE
ELSE
  RETURN FALSE
ENDIF

Aanhalingstekens in MySQL query
upd 20081209

Gebruik DB.Quote:

hDB.Exec("SELECT text FROM " & DB.Quote(sTable) & " ORDER BY rand() LIMIT1") 

Aanpassen van waarden in de databank tabel
upd 20081209

Met Gambas databank functies als $hConn.Edit

sCriteria = "id = &1"
iParameter = 1012

$hConn.Begin

hResult = $hConn.Edit("tblDEFAULT", sCriteria, iParameter)
' Set field value
hResult!Name = "Mr Smith"

' Update the value
hResult.Update
$hConn.Commit

Itt volle sql commando’s als in

sNewVal = "Mr Smith"
$hConn.Exec("UPDATE tblDEFAULT set Name=&1 WHERE id = &2", sNewVal, iParameter)

Leave a Reply