SQLite doppelte Einträge/von GetGadgetState zu den Daten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
R3booz
Beiträge: 90
Registriert: 01.11.2012 19:28
Computerausstattung: Intel Core I3, 4GB RAM, RADEON HD 6660 1 GDDR5
Kontaktdaten:

SQLite doppelte Einträge/von GetGadgetState zu den Daten

Beitrag von R3booz »

[SOLVED]

1.Wie kann ich es schaffen das mein Programm automatisch überprüft ob es doppelte Einträge gibt und diese löscht?

2.Wie bekomm ich aus der Nummer von GetGadgetState - angewand auf ListIconGadget - die dazugehörigen Daten? Antwort: GetGadgetItemText(#Gadget, Eintrag [, Spalte])

Kann mir jemand dazu ein Beispiel oder ähnliches zeigen?

mfg R3booz
Zuletzt geändert von R3booz am 22.01.2013 17:09, insgesamt 1-mal geändert.
Rechtschreibfehler sind kostenlos und im Preis inklusive!

http://www.games-table.de.tl/
Version 5.20 LTS
MenschMarkus
Beiträge: 229
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: SQLite doppelte Einträge/von GetGadgetState zu den Daten

Beitrag von MenschMarkus »

R3booz hat geschrieben:1.Wie kann ich es schaffen das mein Programm automatisch überprüft ob es doppelte Einträge gibt und diese löscht?
Vorschlag, versuche schon vor dem Speichern doppelte Einträge zu vermeiden. Dazu sind 2 Schritte notwendig:

1. SQLite Datenbank mit neuem Wert filtern
2. Zählen ob schon einträge vorhanden sind

und das geht so:

Code: Alles auswählen

DatabaseQuery(#Database,"SELECT count(*) FROM Datenbankname WHERE Suchfeld = 'Feldeintrag'")
NextDatabaseRow(#Database)
TMP.d = GetDatabaseDouble(#Database,0) 
Wenn TMP.d <> 0 dann existiert ein Datensatz mit dem dem Eintrag Feldeintrag im Feld Suchfeld schon, also den neuen Eintrag mit dem identischen Feldwert nicht in die Datenbank einfügen.

Vorsicht beim Löschen. Nicht einfach nach einem Wert im Datenbankfeld filtern und löschen, so werden alle Einträge gelöscht. Das wäre ungeschickt sofern mindestens 1 Eintrag erhalten bleiben soll.
R3booz hat geschrieben:2.Wie bekomm ich aus der Nummer von GetGadgetState - angewand auf ListIconGadget - die dazugehörigen Daten? Antwort: GetGadgetItemText(#Gadget, Eintrag [, Spalte])
Du hast Dir die Frage eigentlich schon selbst beantwortet, eben über GetGadgetItemText. Hier musst Du jedes Feld einzeln ansprechen wenn Du mehrere Daten auslesen möchtest. Befinden sich z.B 5 Spalten im ListIconGadget und du möchtest jeden Wert haben, musst Du 5 Abfragen durchführen. Für jede Spalte eine Abfrage

Code: Alles auswählen

Variable1.s = GetGadgetItemText(#Gadget,1,0)
Variable2.s = GetGadgetItemText(#Gadget,1,1)
Variable3.s = GetGadgetItemText(#Gadget,1,2)
Variable4.s = GetGadgetItemText(#Gadget,1,3)
Variable5.s = GetGadgetItemText(#Gadget,1,4)
Viel Erfolg
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: SQLite doppelte Einträge/von GetGadgetState zu den Daten

Beitrag von bobobo »

zu 1.
Nachträglich geht das durch eine Analyse der vorhandenen Daten durch Aggregatfunktionen (count ,avg,max,min,..)

Bei nicht allzu großem Umfang ginge auch die Gnozalsche ListIcon-Lib (nur Windows) (such mal im englischn Forum), dort
kann man u.a. auch simpel sortiert darstellen.

Ansonst sollte man das alles natürlich von Anfang an vermeiden, wenn man es nicht so braucht.
Die Vorab-Analyse der Daten (wie oben beschrieben) kann man sich meistenteils sparen wenn man Indizes und/oder
Constraints in die DB mit einbaut. (guck mal sqlite.org). Das Programm muss dann aber "schlau" genug sein mit sowas
umgehen zu können.

zu 2.
Vermutlich willst Du auf den zugehörigen Datensatz in der DB zugreifen. Dazu musst Du beim Füllen des ListiconGadget
drauf achten hinreichend Daten zum genauen Identifizieren der Datenzeile mit darzustellen.
Üblicherweise definiert man pro Tabelle eine Spalte als eindeutige Index-Spalte. Damit ist das Identifizieren (der Name
Index deutet schon drauf hin) ein Klacks.
Bei SQLITE kannst Du auf die expizite Definition einer solchen Spalte verzichten, weil SQLite sowas "ab Werk" schon einbaut.
Die Spalte rowid hast Du nie definiert, ist aber trotzdem da und enthält so einen durchlaufenden eindeutigen Index.
Bei anderen DBs ist das nicht unbedingt gegeben und man sowas dann selber einbauen.
Wenn dieser Eintrag (rowid) auch im Listicon mit auftaucht, hast Du so den Haken für die entprechende DB-Zeile.
(und nun kommt bestimmt die Frage auf, wie man einen Index in einem Listicongadget hinterlegen kann ohne das
man den sieht. Die Boardsuche sagt dazu
http://www.purebasic.fr/german/viewtopi ... verstecken )

Ein Update der DB mit dem neuen Wert sähe dann ungefähr so aus
update meinetabelle set wertespalte=neuerwert where rowid =rowid_der_angeklickten_Zeile
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
R3booz
Beiträge: 90
Registriert: 01.11.2012 19:28
Computerausstattung: Intel Core I3, 4GB RAM, RADEON HD 6660 1 GDDR5
Kontaktdaten:

Re: SQLite doppelte Einträge/von GetGadgetState zu den Daten

Beitrag von R3booz »

Vielen Dank :wink:
Ich hab mir jetzt zu 1. überlegt das ich das bei mir nicht mit rein nehm da ich sehr viele spalten hab und das dann wohl eher mehr mit der Wahrscheinlichkeit zu tun hat wieviele Spalten überein stimmen.

Meine Lösung ist jetzt grundlegend mit IDs zu arbeiten und der User kann dann selbst überflüssige Daten löschen und so hat alles mehr Ordnung :)

mfg R3booz
Rechtschreibfehler sind kostenlos und im Preis inklusive!

http://www.games-table.de.tl/
Version 5.20 LTS
Antworten