Startseite › Foren › Deutsches LiveCode-Forum › DataGrid – Daten auslesen / Spalte
- Dieses Thema hat 10 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 7 Monaten von
skasubek.
-
AutorBeiträge
-
-
September 19, 2020 um 13:22 Uhr #22949
Hall liebe LiveCode Gemeinde,
ich bin noch recht jungfreulich was LiveCode angeht. Nun habe ich aber folgendes Problem. Ich nutze ein DataGrid um Daten aus einer MySQL Datenbank auszulesen und anzuzeigen. Klappt prima.
Ich füge mit LiveCode auch Daten hinzu. Klappt Prima.
Nun möchte ich gerne im DataGrid eine markierte Zeile löschen. Dies funktioniert auch.
Aber ich möchte und muss gleichzeitig aus der markierten ZEILE auch eine bestimmte ZELLE auslesen. In dem Beispiel die „ID“ um diese beim DELETE Befehl für MySQL mit zu übergeben.
Wie kann ich das anstellen. Hier mein Code bisher…
on MouseUp put the dgHilitedIndex of group "tabelle" into loeschen send "DeleteIndex loeschen" to group "tabelle" put revOpenDatabase("mysql", "", "", "", "") into dbid put "DELETE FROM termine WHERE ID = :1" into sql1 revExecuteSQL dbid, sql1, "loeschen" end MouseUp
Hier noch ein Bild der DataGrid
DANKE -
September 19, 2020 um 13:32 Uhr #22951
Hallo skasubek,
willkommen im Forum!
Selbstredend musst Du die Info aus der Zeile herauspulen, bevor Du sie löschst.
Ich weiß, das ist Dir schon klar. 😉Ich nehme mal an, die Spatte heisst auch -> ID
Dann sollte es so gehen:on MouseUp put the dgHilitedIndex of group "tabelle" into loeschen ## Zuerst die Daten der gesamten Zeile auslesen: put the DGDATOFINDEX[loeschen] of grp "tabelle" into tData ## tDate enthält nun ein Array mit den Daten dieser Zeile ## Nun die ID Spalte herausziehen: put tData["ID"] into dieID ## Jetzt getrost: send "DeleteIndex loeschen" to group "tabelle" put revOpenDatabase("mysql", "", "", "", "") into dbid ## dieID anfügen: put ("DELETE FROM termine WHERE ID = " & dieID) into sql1 revExecuteSQL dbid, sql1 end MouseUp
Gruß
Klaus
-
September 19, 2020 um 13:55 Uhr #22953
Ich mache es z.B.
(dank der Hilfe von Klaus)
so dass ich mir ja die Daten aus dem DataGrid vorher schon mal irgendwo schön aufgedröselt anzeigen lasse und danach mir die bereits angezeigte ID schnappe und den DB Eintrag lösche der diese ID hat.Der code der meine Anzeigefelder füllt:
on selectionChanged put the dgHilitedLines of me into zeile put zeile put the dgDataOfLine[zeile] of me into tData put the keys of tData into tKeys LOCK SCREEN repeat for each line tKey in tKeys if tKey = "bild" then set filename of image "imgBild" to tData["bild"] else put "fld_" & tKey into tFeldname put tData[tKey] into fld tFeldname end if end repeat unlock screen end selectionChanged
danach habe ich einfach einen Del. Button mit diesem Code:
on delDB sqlCon put text of fld fld_id into upID put "DELETE FROM huhn WHERE id="&upID&"" into sql revExecuteSQL connID, sql if the result <> EMPTY then answer the result &" Datensatz Nr.: "&upID&" wurde gelöscht!" end if put filename of img"imgBild" into zuLoeschen --put filneame of image"imgBild" into delFile if filename of img"imgBild" <> EMPTY then delete file zuLoeschen end if revCloseDatabase connID displayDB answer "OK der ist weg" end delDB
der Button ruft „delDB“ auf
-
September 19, 2020 um 14:01 Uhr #22955
Danke für deine Antwort. Leider funktioniert es noch nicht wirklich. Ich habe jetzt einen ExtraButton genommen und ein Textfeld. In diesem wollte ich mir nur die ID anzeigen lassen. Aber es passiert nichts …
on MouseUp put the dgHilitedIndex of group "tabelle" into loeschen ## Zuerst die Daten der gesamten Zeile auslesen: put the DGDATOFINDEX[loeschen] of group "tabelle" into tData ## tDate enthält nun ein Array mit den Daten dieser Zeile ## Nun die ID Spalte herausziehen: #put tData["ID"] into dieID put dieID into field "textfeld" end MouseUp
Die Spalte heißt aber ID in meinem DataGrid … Siehe Bild oben. Woran kann es liegen?
-
September 19, 2020 um 14:28 Uhr #22957
Tja, DIESE Zeile solltest Du nun wirklich nicht auskommentieren, gelle? 😀
... #put tData["ID"] into dieID ...
-
September 20, 2020 um 11:54 Uhr #22987
Danke. Es geht aber leider dennoch nicht 🙁
Ich möchte doch nur von der angeklickten Zeile den Werte der Spalte „ID“ auslesen …
Hat noch jemand eine Idee? 🙂
on MouseUp put the dgHilitedLines of me into zeile put zeile put the dgDataOfLine[zeile] of me into tData put the keys of tData into tKeys put tData["ID"] into IDD put IDD into field "textfeld" end MouseUp
-
September 20, 2020 um 12:09 Uhr #22990
Ich habe das hier nachgebaut und es funktioniert wie gewünscht!
Es geht aber leider dennoch nicht
Das ist eine recht vage Fehlerbeschreibung, was genau passiert denn bzw. was endet in Feld „textfeld“?
Du hast Dein Skript doch der DataGrid Gruppe hinzugefügt, oder einem Button AUSSERHALB des Datagrids?
-
September 20, 2020 um 12:17 Uhr #22992
Hm. Ich habe meine App mal als Bild angefügt.
Zum Test wollte ich jetzt auf den Button (1) klicken um aus dem DataGrid (2) die markierte Zeile auszulesen und da insbesondere halt die „ID“. Und diese ID sollte zur Kontrolle im Textfeld (3) angezeigt werden.
Und das geht mit dem o.g. Code leider nicht.
Das Skript liegt hinter dem Button.
Wie kann ich es der DataGrid Gruppe hinzufügen?
-
September 20, 2020 um 12:20 Uhr #22996
Ok. Verstanden. Jetzt funktioniert es. Jetzt muss ich die die ID nur noch als globale Variable speichern um sie mit einem Button „Termine löschen“ nutzen kann. 🙂
-
September 20, 2020 um 12:22 Uhr #22998
AHA! 🙂
OK, in einem „auswärtigen“ Button funktioniet OF ME natürlich nicht, denn mit ME ist das Datagrid gemeint!
Im Button muss es heissen:on MouseUp put the dgHilitedLines of grp "tabelle" into zeile put zeile put the dgDataOfLine[zeile] of grp "tabelle" into tData ## put the keys of tData into tKeys put tData["ID"] into IDD put IDD into field "textfeld" end MouseUp
Wie kann ich es der DataGrid Gruppe hinzufügen?
Rchts-Klick auf Dein Datagrid -> Edit script
Das dann aber wieder mit OF ME, geht aber auch mit dem Namen wie oben! -
September 20, 2020 um 12:33 Uhr #23002
Es funktioniert einwandfrei und macht was es soll. 🙂 Vielen lieben DANK!!
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.