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)
