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)