Kleines Verständnisproblem!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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?
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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)
a²+b²=mc²
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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!
:lol: ... 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 Feldinhalte und nicht um Feldnamen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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!
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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!
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Thorsten1867
Beiträge: 1360
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von Thorsten1867 »

Dieses Programm ist hilfreich, um SQL-Statments und Datenbanken zu überprüfen:
http://sourceforge.net/projects/sqlitebrowser/
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@Kiffi: sry für meinen "ruppigen" :lol: 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 :lol:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten