Deutsches LiveCode Wiki
Registrieren
Advertisement

Datenbank Setup[]

LiveCode hat eine Beispieldatenbank eingerichtet, die solche Skripte verwenden. Um sie für deine eigene Datenbank zu verwenden, musst du die Adresse der Datenbank, die Portnummer (falls abweichend von der Standardeinstellung), deinen Benutzernamen und dein Passwort kennen. Grundlagen:

Es gibt 4 Hauptvorgänge, die du ausführen können solltest:

  1. öffnen einer Verbindung zu einer Datenbank
  2. Daten aus der Datenbank auslesen - Abfrage (Query) der Datenbank
  3. Ändern der Datenbank: hinzufügen, bearbeiten oder löschen der Einträge
  4. schließen der Datenbankverbindung.

Wenn du eine Verbindung zu einer Datenbank herstellst, erhältst du eine Verbindungs-ID. Du musst diese Verbindungs-ID in allen anderen Vorgängen verwenden, um deinen Scripts mitzuteilen, welche Datenbankverbindung verwendet werden soll.

Mit der Datenbank verbinden[]

Erstelle einen neuen Stack und füge einen Button aus der Tools palette hinzu. Verwende den Inspektor um den Namen des Buttons zu "Verbinden" zu ändern und kopiere das Skript unten in das Skript des Buttons. Wir verwenden hier RevOpenDatabase:

on mouseUp
  put "runrev.com" into tDatabaseAddress
  put "runrev_test" into tDatabaseName
  put "runrev_example" into tDatabaseUser
  put "example" into tDatabasePassword	
  -- Verbindung mit der Datenbank 
  put revOpenDatabase("MySQL", tDatabaseAddress, tDatabaseName, tDatabaseUser, tDatabasePassword) into tResult
  -- stellt fest ob es korrekt arbeitet und zeig eine Nachricht, wenn nicht
  -- & deklariert die connection ID als globale Variable
  if tResult is a number then
     put tResult into tConnectionID
     -- wir benutzen eine allgemeine propertie um sie überall verwenden zu können 
     set the ConnectionID of this stack to tConnectionID  
     answer info "Connected to the database." & cr & "Connection ID = " & gConnectionID
  else
     put empty into gConnectionID
     answer error "Unable to connect to the database:" & cr & tResult
  end if
end mouseUp

Speichere das Script im Script Editor, wechsle in den Live-Modus und klicke den "Verbinden" - Button zum testen.

Es sollte sich nun mit der Sample Datenbank auf runrev.com verbinden und dir sagen, ob es erfolgreich war.

Wenn es eine Error-Meldung gibt, dann kontrolliere noch einmal das Script. Insbesondere die vier Variablen, welche die Verbindungs-Informationen beinhalten.

Beachte: Wenn du den Button mit den falschen Einstellungen testet, kann es längere Zeit dauern bis die Verbindung fehlschlägt. Geräte also nicht in Panik, wenn es wie eingefroren aussieht.

Daten aus der Datenbank erhalten[]

Datei:MySQL-example.png

Example of the stack

Um Daten aus der Datenbank zu erhalten, konstruierst du eine Standart SQL Abfrage. Hierfür benutzt du die revDataFromQuery Funktion, um die passenden Daten zu erhalten.

Ziehe einen weiteren Button auf deine Card und benenne ihn mit Hilfe des Inspectors zu "Abfrage" um.

Nun ziehst du noch ein "Scrolling Text Field" auf die Card und nennst es "Data". Die Namen der Buttons sind nicht so wichtig, doch das Script wird sich auf auf das Field "Data" beziehen. Stelle also sicher, dass der Button korrekt benannt ist.

Kopiere nun das untenstehende Script und füge es in das Script des "Abfrage" - Buttons ein:

on mouseUp
  -- checkt die globale connection ID um sicherzustellen, dass eine korrekte Datenbank Verbindung besteht
  put the connectionID of this stack into gConnectionID
     if gConnectionID is not a number then
        answer error "Please connect to the database first."
        exit to top
     end if	
     -- konstruiert das SQL (dies wählt alle Daten aus der angegebenen Tabelle aus) 
     put "Table1" into tTableName	-- ändere hier auf den Namen einer Tabelle in deiner Datenbank
     put "SELECT * FROM " & tTableName into tSQL	
     -- Fragt die Datenbank ab
     put revDataFromQuery(tab, cr, gConnectionID, tSQL) into tData	
     -- überprüft das Ergebnis und zeigt die Daten oder eine Error Mitteilung an
     if item 1 of tData = "revdberr" then
        answer error "There was a problem querying the database:" & cr & tData
     else
        put tData into field "Data"
     end if
end mouseUp

Speichere das Script und teste den Button im Live Modus. Ich habe einige Beispieleinträge in die Datenbank eingegeben, damit du einige Informationen im "Data" Field erscheinen sehen solltest.

Neue Daten in die Datenbank einfügen[]

Hierfür wird eine ähnliche Technik wie bei der Abfrage der Daten benutzt. Konstruiere einen SQL-Befehl um neue Daten einzufügen und benutze dann einen LiveCode Befehl um dieses SQL an die Datenbank zu senden und eine Antwort darauf zu erhalten. Hier wird der Befehl revExecuteSQL verwendet.

Erstelle wie zuvor einen neuen Button und nenne ihn "Daten einfügen". Kopiere untenstehendes Script und füge es in das Script dieses Buttons ein.

on mouseUp
  -- checkt die global connection ID um sicherzustellen dass eine Datenbank Verbindung besteht
  put the connectionID of this stack into gConnectionID
     if gConnectionID is not a number then
        answer error "Please connect to the database first."
        exit to top
     end if	
     -- Bearbeite diese Variablen so, dass sie deiner Datenbank und Tabelle entsprechen
     -- Dies setzt eine Tabelle namens Table1 mit 3 Feldern voraus
     put "Table1" into tTableName
     put "firstName, lastName, birthDate" into tFields
     put "Mary" into tFirstName
     put "Smith" into tLastName
     put the short date into tBirthDate	-- Das ist unsinnig, aber gibt den Daten etwas Abwechslung	
     -- erstelle den SQL - die :1, :2 & :3 Platzhalter in der SQL werden in der revExecuteSQL Zeile mit Variablen versehen
     put "INSERT INTO " & tTableName & " (" & tFields & ") VALUES (:1, :2, :3)" into tSQL	
     -- sendet den SQL an die Datenbank und fügt Daten aus Variablen in die Platzhalter ein.
     revExecuteSQL gConnectionID, tSQL, "tFirstName", "tLastName", "tBirthDate"	
     -- checkt das Ergebnis und zeigt eine positive oder eine negative Meldung an
     if the result is a number then
        answer info "New record added."
     else
        answer error "There was a problem adding the record to the database:" & cr & the result
     end if
end mouseUp

Hier wird eine Platzhalter Technik benutzt, um Daten in einen SQL Befehl einzufügen. Wenn du einen SQL Befehl erstellst, benutze :1, :2 usw. um zu zeigen, wo die Variablen hingehören.

Später im revExecuteSQL Befehl, fügst du die Namen der Variablen als extra Parameter hinter den SQL Befehl ein. Diese werden dann der Reihe nach eingefügt, d. H. Im obigen Beispiel wird der Inhalt der Variablen "tFirstName" anstelle von :1 verwendet und der Inhalt von tBirthDate wird verwendet, wo auch immer :3 erscheint.

Klicke nun im Live Modus auf den Button "Daten einfügen" , um ihn zu testen. Du erhältst einen Dialog, der Erfolg oder Misserfolg meldet. Klicken dann erneut auf die Schaltfläche "Abfrage", und du solltest den neu eingefügten Datensatz in der Liste sehen.

Bearbeiten oder Löschen vorhandener Daten[]

Ich werde hier nicht zu sehr ins Detail gehen, da es beinahe das selbe Vorgehen ist, als Daten einzufügen. Um Daten zu bearbeiten, sollte der SQL folgende Form haben:

UPDATE Table1 SET birthDate='12/06/1970' WHERE firstName='Mary' AND lastName='Smith'

Und für das Löschen:

DELETE FROM Table1 WHERE firstName='Mary' AND lastName='Smith'

Dann verwendest du revExecuteSQL und überprüfst auf Fehler wie zuvor. Einfach gesagt: Wenn du Daten erhalten möchtest, benutzt du revDataFromQuery. Wenn du KEINE Daten erhalten möchtest, benutzt du revExecuteSQL.

Verbindung beenden[]

Es ist immer eine gute Idee, die Verbindung zur Datenbank zu beenden, wenn du fertig bist. Alle Verbindungen werden automatisch geschlossen, wenn deine Anwendung beendet wird. Es ist jedoch immer noch eine gute Vorgehensweise, dies selbst zu tun.

Erstelle wieder einen Button mit dem Namen "Verbindung beenden" und kopiere das untenstehende Script in das Script des Buttons.

on mouseUp	
  put the connectionID of this stack into gConnectionID
  -- sollte eine Verbindung offen sein, schließe sie und leere gConnectionID
  if gConnectionID is a number then
     revCloseDatabase gConnectionID
     put empty into gConnectionID
  end if
end mouseUp

Arbeiten mit Binärdaten[]

Um Binärdaten hochzuladen, musst du die Variable in der revExecuteSQL benutzen.

Das SQLStatement kann einen oder mehrere Platzhalter enthalten, die durch einen Doppelpunkt (:) vorangestellte, fortlaufende Nummern sind. Der Befehl revExecuteSQL ersetzt das entsprechende Element in der Variablenliste für jeden dieser Platzhalter. Wenn du beispielsweise zwei Variablen namens "valueX" und "valueY" hast, kannst du ein "SQLStatement" verwenden, das Platzhalter wie folgt enthält:

revExecuteSQL myID, "insert into mytable values(:1,:2)", "valueX","valueY"

Wenn du Binärdateien verwendest, musst du das Präfix * b in den Variablennamen einfügen. Wenn also eine Variable, die eine Binärdatei enthält, "valueX" lautet, lautet der korrekte Code:

revExecuteSQL connID, "insert into mytable values(:1)", "*bvalueX"

Da der revExecuteSQL-Befehl den binären Marker "* b" löscht, wird er als Binärdatei an die Datenbank übergeben und nicht als Textdatei.

Um eine Binärdatei zu erhalten, "'musst'" du revQueryDatabase und revDatabaseColumnNamed verwenden (auf keine andere Weise), um z. B. den Bilddatenspeicher aus einer Datenbank zu laden, in der sich Bilddateien in einer "Bild" Spalte (Column) befinden.

put revQueryDatabase(connID, "SELECT * FROM images WHERE id=" & field "id" & ";") into tRecordSet
put revDatabaseColumnNamed(tRecordSet, "image", tImage) into tError #tImage contains data
revCloseCursor tRecordSet


Beispiel mit UPDATE:

 put "UPDATE flags SET  logo=:1  WHERE ID="& tID &" ;" into tSQL 
 revExecuteSQL connID,tSQL,"*blogo
Advertisement