JASLP - just another SQLite Problem ;-)

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

JASLP - just another SQLite Problem ;-)

Beitrag von PureBasic4.0 »

Hi, Leute

ich habe mal wieder weiter gecoded und bin auf folgende fehlerhaften Zeilen gestoßen:

Code: Alles auswählen

          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
          While SQLiteNextRow(Table)
            ok = 1
            Ergebnis$ = SQLiteValue(Table)
            ID = Val(Ergebnis$)
            Debug ID
            Break
          Wend
          If ok = 0
            DBExec("INSERT INTO Shortcuts VALUES('"+Profil$+"','"+Netzwerkg$+"',"+Str(Warnung)+","+Str(BestMld)+")")
            Delay(100)
            SqlString$ = "SELECT ID FROM Shortcuts WHERE Profil = '"+Profil$+"' AND Netzwerkgeraet = '"+Netzwerkg$+"' AND Warnung = "+Str(Warnung)+" AND Bestaetigung = "+Str(BestMld)
            SQLiteGetTable(DBHandle,SqlString$,Table)
            SQLiteNextCol(Table)
            While SQLiteNextRow(Table)
              Debug SQLiteValue(Table)
            Wend
          Else
            _id = ID
          EndIf
          DBExec("INSERT INTO SavedShortcuts VALUES('"+DateiName$+"',"+Str(_id)+")")
Die DBExec Procedure sieht so aus:

Code: Alles auswählen

Procedure DBExec(SqlString$)
  SQLiteExecute(DBHandle,SqlString$,0)
  Fehler$ = SQLiteErrorMsg(DBHandle)
  If Fehler$ = "not an error"
    Error$ = ""
    ProcedureReturn 1
  Else
    Error$ = Fehler$
    ProcedureReturn 0
  EndIf   
EndProcedure
Die Spalte ID in der Tabelle Shortcuts ist ein Autowertfeld.

Das Problem ist, dass der Debug in beiden While-Wend Schleifen nicht ausgeführt wird --> Schleife wird nicht ausgeführt. Aber wieso? Das Prog soll schauen, ob es bereits einen Eintrag mit den Einstellungen Profil, Netzwerkgerät, Warnung und Bestaetigungsmeldung gibt. Wenn es die nicht gibt, soll es einen Neuen eintrag erstellen. Wenn es die aber schon gibt, soll die vorhandene ID benutzt werden. Aber das funktioniert im Code leider nicht. WARUM?

Helft mir!!! :bluescreen:

Thx,

PureBasic4.0
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

Re: JASLP - just another SQLite Problem ;-)

Beitrag von Kiffi »

PureBasic4.0 hat geschrieben:Das Problem ist, dass der Debug in beiden While-Wend Schleifen nicht ausgeführt wird --> Schleife wird nicht ausgeführt. Aber wieso?
check erstmal, ob Deine Queries stimmen:

http://www.purebasic.fr/german/viewtopi ... 631#153631

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 »

ErrorMsg: table Shortcuts has 5 columns but 4 values were supplied.

Der Fehler dürfte doch eigenltich gar nciht auftreten, weil der Eintrag ID ein Autowert ist.

So wird die Datenbank Shortcuts erstellt:

Code: Alles auswählen

DBExec("CREATE TABLE Shortcuts(ID INTEGER PRIMARY KEY AUTOINCREMENT,Profil,Netzwerkgeraet,Warnung,Bestaetigung)")
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

Re: JASLP - just another SQLite Problem ;-)

Beitrag von Kiffi »

PureBasic4.0 hat geschrieben:

Code: Alles auswählen

DBExec("INSERT INTO Shortcuts VALUES('"+Profil$+"','"+Netzwerkg$+"',"+Str(Warnung)+","+Str(BestMld)+")")
ich habe Dich ja bereits ja schon einmal darauf hingewiesen, dass da die
Feldauflistung fehlt...
a²+b²=mc²
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

hä? poste mal bitte nen beispielcode. ich weiß gerade nicht, was du meinst.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

habe mich jetzt mal schlau gemacht. meinst du das so?:

Code: Alles auswählen

DBExec("INSERT INTO Shortcuts('Profil','Netzwerkgeraet',Warnung,Bestaetigung) VALUES('"+Profil$+"','"+Netzwerkg$+"',"+Str(Warnung)+","+Str(BestMld)+")"
Die ErrorMsg ist jetzt not an error.

Hier ist nochmal der gesamte Code, der Probleme macht:

Code: Alles auswählen

     ;{
      If verok = 1
        DateiName$ = SaveFileRequester("","*.lnk","Verknüpfung|*.lnk",0)
        If DateiName$ <> ""
          If LCase(GetExtensionPart(DateiName$)) <> "lnk"
            DateiName$ + ".lnk"
          EndIf
          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
          While SQLiteNextRow(Table)
            ok = 1
            Ergebnis$ = SQLiteValue(Table)
            ID = Val(Ergebnis$)
            Debug ID
            Break
          Wend
          If ok = 0
            DBExec("INSERT INTO Shortcuts('Profil','Netzwerkgeraet',Warnung,Bestaetigung) VALUES('"+Profil$+"','"+Netzwerkg$+"',"+Str(Warnung)+","+Str(BestMld)+")")
            Debug SQLiteErrorMsg(DBHandle)
            Delay(100)
            SqlString$ = "SELECT ID FROM Shortcuts WHERE Profil = '"+Profil$+"' AND Netzwerkgeraet = '"+Netzwerkg$+"' AND Warnung = "+Str(Warnung)+" AND Bestaetigung = "+Str(BestMld)
            SQLiteGetTable(DBHandle,SqlString$,Table)
            SQLiteNextCol(Table)
            While SQLiteNextRow(Table)
              Debug SQLiteValue(Table)
            Wend
          Else
            _id = ID
          EndIf
          DBExec("INSERT INTO SavedShortcuts VALUES('"+DateiName$+"',"+Str(_id)+")")
          Program$ = ProgramFilename()
          CreateShortcut(Program$,DateiName$,GetPathPart(Program$),Str(_id),#SW_SHOWNORMAL,"",#Null,Program$,1)
          MessageRequester("Info","Die Verknüpfung wurde erfolgreich erstellt",#MB_ICONINFORMATION)
        EndIf
        verok = 0
        HideWindow(#Verknuepfung,1)
      EndIf
      ;}
in der Verknüpfung wird als Parameter danach entweder -1 (defaultvorgabe für _id oder 0 (weiß ich nicht woher das kommt) angezeigt. Ich möchte aber, dass das Prog erkennt, ob ein Shortcut-Eintrag mit dem Profil soundso, dem Netzwerkgeraet lalala der Warnung 1 und der Bestaetigung 0 bereits existiert. Wenn ja, soll die ID genommen werden, wenn nicht soll ein neuer Eintrag erstellt werden. Das will aber noch nicht so recht klappen.
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:Die ErrorMsg ist jetzt not an error.
na siehste, dann haste ja jetzt schon mal einen Fehler weniger ;-)

... und lass die Anführungsstriche bei den Feldnamen weg.
Die brauchst Du nur bei Feldwerten vom Typ Text.

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 »

Kiffi hat geschrieben:... und lass die Anführungsstriche bei den Feldnamen weg. Die brauchst Du nur bei Feldwerten vom Typ Text.
Ich habe doch schon alle Anführungsstriche bei Nicht-Text Feldern weggemacht. Oder siehst du noch irgendwo welche?

P.S.: Profil und Netzwerkgeraet sind Text Felder. Warnung und Bestaetigung nicht.
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:Oder siehst du noch irgendwo welche?
PureBasic4.0 hat geschrieben:

Code: Alles auswählen

INSERT INTO Shortcuts('Profil','Netzwerkgeraet',Warnung, ... 
[ ] Du kennst den Unterschied zwischen Feldnamen und Feldwerten.

wäre schön, wenn Du meine Postings auch mal richtig lesen würdest...

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 »

ach, so meinst du das....

habe jetzt die besagte Zeile geändert.

Code: Alles auswählen

DBExec("INSERT INTO Shortcuts(Profil,Netzwerkgeraet,Warnung,Bestaetigung) VALUES('"+Profil$+"','"+Netzwerkg$+"',"+Str(Warnung)+","+Str(BestMld)+")")
Aber trotzdem funktioniert der Code noch nicht wirklich. Beim zweiten oder dritten aufruf der funktion mit gleichen einstellungen wird 0 statt der erstellten ID 1 zurückgegeben.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten