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)