Seite 1 von 1

Daten suchen mit SQLite

Verfasst: 28.11.2004 22:11
von steelbasic
Hallo

ich versuche mich an der SQLite Datenbank. Ich möchte nun Daten suchen und ggf. verändern. Hier hakt es ( siehe <? im code). Ich habe das Beispiel das Kiffi hier mal gepostet hat genommen. Die includedatei habe ich im Originalzustand gelassen. Wo finde ich die Beschreibung zu der Version 3 von SQLite?

Hier der code (Was da zwischen den <<<??? steht sind Reste meiner Versuche)

Code: Alles auswählen


IncludeFile "sqlite3.pbi" 
IncludeFile "sqlite3_design.pb"
Open_Window_0()

;DeleteFile("test.db") 
  
SQLite3_Init() 
  
  sqlite3_dbHandle = SQLite3_OpenDatabase("test.db") 
;  sSQL.s = "CREATE TABLE test (vorname, nachname, PLZ, Ort);" 
;  SQLite3_Execute(sSQL, sqlite3_dbHandle)
  
  
  
  
Repeat
  EventID = WaitWindowEvent()
  Select EventID 
    Case #PB_Event_Gadget 
      Select EventGadgetID()
        Case #hinzu 
          hinzufeld1$ = GetGadgetText(#hinzufeld1)
          hinzufeld2$ = GetGadgetText(#hinzufeld2)
          hinzufeld3$ = GetGadgetText(#hinzufeld3)
          hinzufeld4$ = GetGadgetText(#hinzufeld4)
          
          ;Daten einfügen
          sSQL.s = "INSERT INTO test  (vorname, nachname , PLZ, Ort) VALUES ('"+ hinzufeld1$ + "','" + hinzufeld2$ + "','"+ hinzufeld3$+"','"+ hinzufeld4$ +"');"
          SQLite3_Execute(sSQL, sqlite3_dbHandle)
          lastaktion$ = "Daten hinzugefügt"

        Case #ende                                              ;Programmende
            SQLite3_CloseDatabase(sqlite3_dbHandle)
            End 

        Case #info
            ;Anzahl Reihen (Datensätze) und Spaltenanzahl anzeigen
            SQLite3_GetTable("SELECT * FROM test", @myRows, @myCols, sqlite3_dbHandle) 
            SetGadgetText(#zeilen,Str(myRows))
            SetGadgetText(#spalten,Str(myCols))
            lastaktion$ = "Info angefordert"

            ;Daten im Listview anzeigen
            For i  = 1 To myRows 
              Anzeige1$ = DBData(Row+i, Col+0)
              Anzeige2$ = DBData(Row+i, Col+1)
              Anzeige3$ = DBData(Row+i, Col+2)
              Anzeige4$ = DBData(Row+i, Col+3)
              AddGadgetItem(#Listview_0,0, Anzeige1$ +" ; "+ Anzeige2$+" ; " + Anzeige3$+" ; "+Anzeige4$)
            Next
            
            ;Spaltentext anzeigen
              SetGadgetText(#spalte1,(DBData(0,Col+0)))
              SetGadgetText(#spalte2,(DBData(0,Col+1)))
              SetGadgetText(#spalte3,(DBData(0,Col+2)))
              SetGadgetText(#spalte4,(DBData(0,Col+3)))
            ;<<<<<<<???????????????????????????????????????????????????????????      
            Case #Suche     
              ;daten holen / suchen 
             SQLite3_GetTable("SELECT * FROM test, WHERE vorname = butzi")      
             SQLite3_Execute(sSQL, sqlite3_dbHandle)
              ;$DB, "SELECT Sache, Eigenschaft FROM Beispieltabelle WHERE id = 1 LIMIT 1");
            ;<<<<<<<???????????????????????????????????????????????????????????  
              
              
      EndSelect
  EndSelect          
 
  StatusBarText(#StatusBar,0,"letzte Aktion: " + lastaktion$) 
Until EventID = #PB_EventCloseWindow  

SQLite3_CloseDatabase(sqlite3_dbHandle)
End  

Re: Daten suchen mit SQLite

Verfasst: 28.11.2004 22:15
von Kiffi

Code: Alles auswählen

  SQLite3_GetTable("SELECT * FROM test, WHERE vorname = butzi")      
da hast Du ein Komma zuviel in der Abfrage.
Ausserdem werden Strings in Hochkommata angegeben.

Code: Alles auswählen

  SQLite3_GetTable(" SELECT * FROM test WHERE vorname = 'butzi' ", @myRows, @myCols, sqlite3_dbHandle) 
Grüße ... Kiffi

schon besser

Verfasst: 28.11.2004 22:31
von steelbasic
Vielen Dank Kiffi,

die Fehlermeldung ist weg. Die Ausgabe so wie es jetzt da steht ist

1;4

Code: Alles auswählen

          ;<<<<<<<???????????????????????????????????????????????????????????      
            Case #Suche     
              ;daten holen / suchen 
               SQLite3_GetTable(" SELECT * FROM test WHERE vorname = 'butzi' ", @myRows, @myCols, sqlite3_dbHandle)
               ;SQLite3_Execute(sSQL, sqlite3_dbHandle)
               AddGadgetItem(#Listview_0,0, Str(myRows) +" ; "+ Str(myCols))
            ;<<<<<<<???????????????????????????????????????????????????????????  
Wie kriege ich die Zeile mit butzi haferschleim angezeigt? Wie kann ich diese dann ändern?

Ich bin bestimmt nervig aber ich bastel an dieser Sache schon seit Tagen herum! Und ich habe wohl irgendwie ein Verständnisproblem.

Re: schon besser

Verfasst: 28.11.2004 22:45
von Kiffi
> Wie kriege ich die Zeile mit butzi haferschleim angezeigt?

im Prinzip muss Du so vorgehen, wie Du es bereits bei Deinem 'Case #info' - Zweig gemacht hast.

Zur Erklärung: Nachdem Du SQLite3_GetTable() ausgeführt hast, steht in
myRows die Anzahl der zurückgelieferten Zeilen und in myCols die Anzahl
der zurückgelieferten Spalten (in Deinem Fall 1 Zeile, 4 Spalten)

Im Array DBData() stehen die Daten. Diese kannst Du mit Angabe von
Zeilen und Spaltennummern ausgeben lassen.

> Wie kann ich diese dann ändern?

Mit Update oder Delete - Anweisungen

Code: Alles auswählen

  sSQL.s = "Update test Set vorname='NeuerVorname' Where vorname='AlterVorname' " ; oder was auch immer
  SQLite3_Execute(sSQL, sqlite3_dbHandle)
Grüße ... Kiffi

Verfasst: 28.11.2004 23:57
von steelbasic
Das Funktioniert soweit. Ich denke und hoffe, dass ich jetzt klar komme.

Trotzdem habe ich noch eine Frage:

Code: Alles auswählen

SQLite3_GetTable(" SELECT * FROM test WHERE vorname = '" + sucheeintrag$ + "' ", @myRows, @myCols, sqlite3_dbHandle)
Was muss ich eintragen wenn ich die ganze Datenbank nach "xyz" durchsuchen will. Also nicht nur bei den Vornamen nach "xyz" suchen möchte.

Ich habe keine Doku über SQLite. Was ich als Doku im Internet gefunden habe ist nicht sehr viel. Wenn jemand noch einen Link hat ....bitte her damit.



Vielen Dank erstmal :allright:

Verfasst: 29.11.2004 00:23
von Kiffi
> Was muss ich eintragen wenn ich die ganze Datenbank nach "xyz"
> durchsuchen will.

Die gesamte Datenbank? Die SQL zu solch' einem Vorhaben kann (je nach
Datenbank) ziemlich komplex werden. Meines Erachtens macht eine solche
Abfrage auch keinen Sinn. Was willst Du denn genau damit bezwecken?

> Ich habe keine Doku über SQLite.

http://www.sqlite.org/lang.html

hier findest Du alles, was SQLite unterstützt.

Grüße ... Kiffi

Verfasst: 29.11.2004 00:32
von steelbasic
ES geht um eine kleine Datenbank mit max. 200 Artikeln die nach

ProduktID / Bezeichnung / Eigenschaft

sortiert ist. Nun kann es sein, dass man nicht die ProduktID sucht (was zu 90% der Fall ist), sondern wissen will welche Produkte die Eigenschaft P800 haben.

Also wäre es bei dieser kleinen Datenbank am einfachsten grundsätzlich in allen Feldern zu suchen.

Danke für den link Kiffi

Verfasst: 29.11.2004 00:36
von Kiffi
> Also wäre es bei dieser kleinen Datenbank am einfachsten grundsätzlich in
> allen Feldern zu suchen.

Code: Alles auswählen

Select * From ArtikelTabelle Where ProduktID = 'P800' Or Bezeichnung = 'P800' Or Eigenschaft = 'P800'
Grüße .. Kiffi

Verfasst: 29.11.2004 00:52
von steelbasic
Super...... das funktioniert.

Besten Dank Kiffi. Mit diesem Erfolgserlebnis gehe ich ins Bett.