Seite 2 von 3
Verfasst: 29.05.2007 14:27
von PureBasic4.0
OK. Das funktioniert jetzt. Aber einen hab ich noch:
Hier der Code:
Code: Alles auswählen
Profil$ = GetGadgetText(#Verk_Profil)
Netzwerkg$ = GetGadgetText(#Verk_Netzwerkg)
Warnung = GetGadgetState(#Verk_SWarnung)
BestMld = GetGadgetState(#Verk_BestM)
SqlString$ = "SELECT ID FROM Shortcuts WHERE Profil = '"+Profil$+"' AND Netzwerkgeraet = '"+Netzwerkg$+"' AND Warnung = "+Str(Warnung)+" AND Bestaetigung = "+Str(BestMld)
SQLiteGetTable(DBHandle,SqlString$,Table)
ok = 0
_id = -1
SQLiteNextCol(Table)
While SQLiteNextRow(Table)
ok = 1
Ergebnis$ = SQLiteValue(Table)
ID = Val(Ergebnis$)
Break
Wend
If ok = 0
SqlString$ = "INSERT INTO Shortcuts VALUES("+Str(Anzahl)+",'"+Profil$+"','"+Netzwerkg$+"',"+Str(Warnung)+","+Str(BestMld)+")"
SQLiteExecute(DBHandle,SqlString$,0)
_id = Anzahl
Else
_id = ID
EndIf
SqlString$ = "INSERT INTO SavedShortcuts VALUES('"+DateiName$+"',"+Str(Anzahl)+")"
SQLiteExecute(DBHandle,SqlString$,0)
Program$ = ProgramFilename()
CreateShortcut(Program$,DateiName$,GetPathPart(Program$),Str(_id),#SW_SHOWNORMAL,"",#Null,Program$,1)
MessageRequester("Info","Die Verknüpfung wurde erfolgreich erstellt",#MB_ICONINFORMATION)
So wird die Datenbank erstellt:
Code: Alles auswählen
SQLiteExecute(DBHandle,"CREATE TABLE Shortcuts(ID,'Profil','Netzwergeraet',Warnung,Bestaetigung)",0)
Ich möchte überprüfen, ob bereits ein Shortcut mit den Einstellungen Profil,Netzwerkgerät,Warnung,Bestaetigung existiert. Wenn ja, soll die bereits gespeicherte ID verwendet werden. Wenn es nicht existiert, soll es neu erstellt werden. Aber irgendwie ist der Code noch Fehlerhaft. Könnt ihr mir bitte auf die Sprünge helfen?
Verfasst: 29.05.2007 14:43
von Kiffi
PureBasic4.0 hat geschrieben:Aber irgendwie ist der Code noch Fehlerhaft.
aha! Eine sehr aussagekräftige Fehlermeldung!
PureBasic4.0 hat geschrieben:Code: Alles auswählen
SqlString$ = "INSERT INTO SavedShortcuts VALUES('"+DateiName$+"',"+Str(Anzahl)+")"
schwer zu sagen, aber sollte das nicht eher so aussehen:
Code: Alles auswählen
SqlString$ = "INSERT INTO SavedShortcuts VALUES('"+DateiName$+"',"+Str(_id)+")"
Vielleicht schreibst Du mal, was genau nicht funktioniert.
Grüße ... Kiffi
P.S.:
1. Das ID-Feld sollte generell vom Typ Autowert sein und nicht von Dir
selber mit der Anzahl der Datensätze befüllt werden. Spätestens, wenn Du
einen Datensatz aus der Tabelle löscht, bekommst Du Probleme. Mit dem
Autowert hast Du die Gewissheit, dass die Werte, die in ID stehen
eindeutig sind.
2. Ich weiß nicht, was Du damit bezwecken willst, dass Du einige
Feldnamen in Hochkommata schreibst. Sie sind kein Indikator dafür, dass
es sich um Textfelder handelt. Lass sie einfach weg.
Code: Alles auswählen
SQLiteExecute(DBHandle,"CREATE TABLE Shortcuts(ID INTEGER PRIMARY KEY AUTOINCREMENT, Profil, Netzwergeraet, Warnung, Bestaetigung)",0)
Verfasst: 29.05.2007 15:32
von PureBasic4.0
Kiffi hat geschrieben:
Vielleicht schreibst Du mal, was genau nicht funktioniert.
@Kiffi: Wenn ich diese Funktion aufrufe, wird immer eine fortlaufende Zahl angezeigt. Ich möchte aber, dass, wenn die Einstellungen gleich sind, die gleiche ID verwendet wird. Ich muss es jetzt mal deine kleine Verbesserung austesten (die mit dem _id)
Zum Autowert: Ich möchte kein Autowert benutzen, da ich bereits einen Code habe, der die IDs eindeutig identifiziert (siehe letzte Seite). Da habe ich mich schon so angestrengt und jetzt soll ich mich nochmal anstrengen, um das, worum ich mich vorhin bemüht habe, wieder zunichte zu machen? NEIN!
Zu den Hochkommatas: Ich habe in vielen SQL-Büchern gelesen, dass man Strings in Hochkommata schreiben soll, weil wenn mal ein Komma dabei ist, dass nicht das andere Feld mit dem weiterführenden Inhalt beschrieben wird.
Verfasst: 29.05.2007 15:37
von Kiffi
PureBasic4.0 hat geschrieben:Da habe ich mich schon so angestrengt und jetzt soll ich mich nochmal anstrengen, um das, worum ich mich vorhin bemüht habe, wieder zunichte zu machen? NEIN!

... pffft! machdochwassuwillz
PureBasic4.0 hat geschrieben:Zu den Hochkommatas: Ich habe in vielen SQL-Büchern gelesen, dass man Strings in Hochkommata schreiben soll, weil wenn mal ein Komma dabei ist, dass nicht das andere Feld mit dem weiterführenden Inhalt beschrieben wird.
Dann musst Du wohl die ganzen Bücher noch einmal etwas genauer lesen,
denn dort geht es um Feldi
nhalte und nicht um Feld
namen.
Grüße ... Kiffi
Verfasst: 29.05.2007 16:52
von PureBasic4.0
OK. Ich habe auch Feldinhalte gelesen (warum habe ich die Namen in Hochkommatas gesetzt???).
Aber der Fehler bleibt trotz deiner Verbesserung immernoch erhalten. Die _id wird jetzt zwar richtig in die DB geschrieben, aber ich glaube, der inhalt der _id ist falsch. Das Prog soll überprüfen, ob es die Einstellungen in der DB bereits gibt und dann entscheiden, ob es einen neuen Eintrag in der DB mit einer neuen ID macht, oder die alte ID mit denselben Einstellungen benutzt. Verstanden?
Ich kriege es jedenfalls nicht hin, den Code so zu schreiben, dass das funktioniert. BITTE HELFT MIR!
Verfasst: 29.05.2007 17:27
von Kaeru Gaman
nuja, was soll ich sagen....
Code: Alles auswählen
ok = 0
_id = -1
SQLiteNextCol(Table)
While SQLiteNextRow(Table)
ok = 1
Ergebnis$ = SQLiteValue(Table)
ID = Val(Ergebnis$)
Break
Wend
If ok = 0
das hat NIX, aber auch GARNIX mit dem snippet zu schigge, das ich dir gepostet hab.
vielleicht versuchs erstmal ohne datenbank,
füll eine array oder ne liste mit zufallszahlen oder sonstwas,
bis du den Algorithmus zum prüfen gerallt hast.
<- das ist nicht beleidigend gemeint sondern stinknormales deutliches deutsch.
Verfasst: 29.05.2007 18:26
von PureBasic4.0
Kaeru Gaman hat geschrieben:das hat NIX, aber auch GARNIX mit dem snippet zu schigge, das ich dir gepostet hab.
Was heißt das jetzt auf Deutsch? Ich versteh's nicht.
Code: Alles auswählen
SqlString$ = "SELECT ID FROM Shortcuts WHERE Profil = '"+Profil$+"' AND Netzwerkgeraet = '"+Netzwerkg$+"' AND Warnung = "+Str(Warnung)+" AND Bestaetigung = "+Str(BestMld)
[/quote]
Diese Zeile sollte eigentlich für die Überprüfung sorgen. Ist da vielleicht irgendwas falsch? Und wie kann ich mit SQLite überprüfen, ob eine bestimmte Datenbank gefüllt ist?
HILF MIR!
Verfasst: 29.05.2007 18:28
von Kiffi
PureBasic4.0 hat geschrieben:Verstanden?
ich weiß nicht, aber irgendwie ist mir Dein Ton zu ruppig. Wir hatten jetzt ja
schon öfter die Situation, dass Du meintest, ich solle Deine DB-Kenntnisse
nicht in Frage stellen und bisher war es so, dass man Dich mit Mühe und Not
davon überzeugen konnte, dass Du einen gravierenden Fehler gemacht hast.
Ich kenne Deinen mit großen Anstrengungen erstellten Code nicht, der die
IDs überprüft, vermute aber, dass es evtl. daran liegt, dass er einfach nicht
richtig funktioniert. Da Du aber auch den von mir empfohlenen Autowert nicht
verwenden willst (und somit zumindest eine gravierende Fehlerquelle
ausgeschlossen werden könnte), sehe ich persönlich keine Möglichkeit mehr,
Dir zu helfen.
Grüße ... Kiffi
Verfasst: 29.05.2007 19:42
von Thorsten1867
Dieses Programm ist hilfreich, um SQL-Statments und Datenbanken zu überprüfen:
http://sourceforge.net/projects/sqlitebrowser/
Verfasst: 30.05.2007 10:08
von PureBasic4.0
@Kiffi: sry für meinen "ruppigen"

Ton. Das meiste war mit einem

dahinter. Sql möchte ich aber trotzdem benutzen. Habe das auch mal mit den Arrays ausprobiert, was du mir gesagt hast, das hat funktioniert.
Kiffi hat geschrieben:Wir hatten jetzt ja schon öfter die Situation, dass Du meintest, ich solle Deine DB-Kenntnisse nicht in Frage stellen
@Kiffi: Habe ich nicht gesagt; ich habe mit keinem Autowert gemeint, dass die IDs KONSTANT bleiben sollen. Wenn ein Eintrag mit der ID 2 gelöscht wird, soll kein Eintrag, der sonst die ID 3 hat, auf die Position mit der ID 2 rutschen. Das mache ich so, weil alle Shortcuts mit Eintragen in der DB Profile verknüpft sind (über die ID werden die identifiziert). Wenn ich da jetzt Autowert nehmen würde, müsste ich auch in der Profile die IDs umstellen. Da es aber mehrere Shortcuts für ein Profil gibt, kann ich in der Profile DB nicht einfach den Eintrag mit der bestimmten ID löschen, weil dann die noch vorhandenen Verknüpfungen ungültig werden. Und umbenennen von der ID 3 auf die ID 2 geht auch nicht, weil es wahrscheinlich noch ein Profil mit der ID 2 gibt; bloß keine Verknüpfung mehr in der DB SavedShortcuts. Dennoch kann es meherere Verknüpfungen in der DB SavedShortcuts geben.
@all: sry, falls ihr mein Postingverhalten "ruppig" findet. Ich brauche auch mal wieder ne Pause
