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

PUBLIC rsDevice AS Result

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 & "%")

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)