Directory scannen und Inhalt in Datenbank sql schreiben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Zerosurf »

Hallo,
ich versuche schon verzweifelt diesen Code hier zum Laufen zu bringen, aber es wird nichts in die Datenbank geschrieben:

Code: Alles auswählen

Procedure.l SearchDirectory(dir$, List yourLinkedList.s(), pattern$="", recursive=1)
  Static level.l=-1
  If Not Right(dir$, 1) = "\"
    dir$+"\"
  EndIf
  Protected dir.l=ExamineDirectory(#PB_Any, dir$, pattern$)
  If dir
    While NextDirectoryEntry(dir)
      If DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
        AddElement(yourLinkedList())
        For n=CountString(dir$, "\")-level To CountString(dir$, "\")
          yourLinkedList()+StringField(dir$, n, "\")+"\"
        Next
        yourLinkedList()+DirectoryEntryName(dir)
        If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory
          yourLinkedList()+"\"
        EndIf
      EndIf
    Wend
    FinishDirectory(dir)
  EndIf
  Protected all.l=ExamineDirectory(#PB_Any, dir$, "")
  If all
    While NextDirectoryEntry(all)
      If DirectoryEntryType(all) = #PB_DirectoryEntry_Directory And DirectoryEntryName(all) <> "." And DirectoryEntryName(all) <> ".."
        level+1
        SearchDirectory(dir$+DirectoryEntryName(all)+"\", yourLinkedList(), pattern$, recursive)
        level-1
      EndIf
    Wend
    FinishDirectory(all)
  EndIf
  ProcedureReturn ListSize(yourLinkedList())
EndProcedure

path$="G:\mp3\mp3\"
NewList FilesAndFolders.s()
found = SearchDirectory(path$, FilesAndFolders(), "*.mp3", 1)
ForEach FilesAndFolders()
  Pfad$=pfad$+FilesAndFolders()
  
  UseSQLiteDatabase()
  
  DatabaseFile$ = "D:\KaraokeSongs.sqlite"
  
  If CreateFile(0, DatabaseFile$)
    CloseFile(0)
    
    If OpenDatabase(0, DatabaseFile$, "", "")
      
      DatabaseUpdate(0, "CREATE TABLE Songlist (Pfad VARCHAR, Dateiname VARCHAR, Artist VARCHAR, Title VARCHAR, DiscID VARCHAR, TrackNo VARCHAR)")
      
      If DatabaseQuery(0, "SELECT * FROM Songlist")
        
        While NextDatabaseRow(0)
          
          DatabaseUpdate(0, "INSERT INTO Songlist (Pfad, Dateiname, Artist, Title, DiscID, TrackNo) VALUES ('" + Pfad$ + "', '10', '', '', '', '')")
          
        Wend
        
        FinishDatabaseQuery(0)
      EndIf
      
      CloseDatabase(0)
    Else
      Debug "Can't open database !"
    EndIf
  Else
    Debug "Can't create the database file !"
  EndIf
  
  
Next
Debug found
Was mach ich falsch?
PureBasic 6.00 | Windows 10 pro (x64)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Kiffi »

Das ForEach gehört direkt um das DatabaseUpdate(). Das DatabaseQuery() brauchst Du in diesem Fall nicht.

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Zerosurf »

Wohin genau?

Hab grad mehrere Möglichkeiten probiert - aber irgendwie schein ich noch immer etwas nicht richtig zu machen?

LG
PureBasic 6.00 | Windows 10 pro (x64)
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von mhs »

Ungefähr so:

Code: Alles auswählen

UseSQLiteDatabase()

DatabaseFile$ = "D:\KaraokeSongs.sqlite"

If CreateFile(0, DatabaseFile$)
  CloseFile(0)
Else
  Debug "Can't create the database file !"
  End
EndIf

If OpenDatabase(0, DatabaseFile$, "", "")
  DatabaseUpdate(0, "CREATE TABLE Songlist (Pfad VARCHAR, Dateiname VARCHAR, Artist VARCHAR, Title VARCHAR, DiscID VARCHAR, TrackNo VARCHAR)")
Else
  Debug "Can't open database !"
  End
EndIf

path$="G:\mp3\mp3\"
NewList FilesAndFolders.s()

found = SearchDirectory(path$, FilesAndFolders(), "*.mp3", 1)

ForEach FilesAndFolders()
  Pfad$=path$+FilesAndFolders()
  DatabaseUpdate(0, "INSERT INTO Songlist (Pfad, Dateiname, Artist, Title, DiscID, TrackNo) VALUES ('" + Pfad$ + "', '10', '', '', '', '')") 
Next

CloseDatabase(0)

Debug found
Und verwende am besten EnableExplicit !
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Zerosurf »

Super - vielen Dank!
PureBasic 6.00 | Windows 10 pro (x64)
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Zerosurf »

Ich versuche grad heraus zu finden, wie ich zusätzliche Daten in die Datenbank schreiben kann, ohne daß ich die alte überschreibe.
Daß sozusagen nach 5 Reihen die nächsten Reihen einfach drangehängt werden.
Könnt ihr mir da bitte weiter helfen?
Vielen Dank!

mit tiroler Grüßen! ;)

ach ja, hier der Code:

Code: Alles auswählen

Procedure.l SearchDirectory(dir$, List yourLinkedList.s(), pattern$="", recursive=1)
  Static level.l=-1
  If Not Right(dir$, 1) = "\"
    dir$+"\"
  EndIf
  Protected dir.l=ExamineDirectory(#PB_Any, dir$, pattern$)
  If dir
    While NextDirectoryEntry(dir)
      If DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
        AddElement(yourLinkedList())
        For n=CountString(dir$, "\")-level To CountString(dir$, "\")
          yourLinkedList()+StringField(dir$, n, "\")+"\"
        Next
        yourLinkedList()+DirectoryEntryName(dir)
        If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory
          yourLinkedList()+"\"
        EndIf
      EndIf
    Wend
    FinishDirectory(dir)
  EndIf
  Protected all.l=ExamineDirectory(#PB_Any, dir$, "")
  If all
    While NextDirectoryEntry(all)
      If DirectoryEntryType(all) = #PB_DirectoryEntry_Directory And DirectoryEntryName(all) <> "." And DirectoryEntryName(all) <> ".."
        level+1
        SearchDirectory(dir$+DirectoryEntryName(all)+"\", yourLinkedList(), pattern$, recursive)
        level-1
      EndIf
    Wend
    FinishDirectory(all)
  EndIf
  ProcedureReturn ListSize(yourLinkedList())
EndProcedure

UseSQLiteDatabase()

DatabaseFile$ = "D:\\sqlite\KaraokeSongs.sqlite"

If CreateFile(0, DatabaseFile$)
  CloseFile(0)
Else
  Debug "Can't create the database file !"
  End
EndIf


If OpenDatabase(0, DatabaseFile$, "", "")
  DatabaseUpdate(0, "CREATE TABLE Songlist (IdNr INTEGER PRIMARY KEY, Pfad VARCHAR, Dateiname VARCHAR, Artist VARCHAR, Title VARCHAR, DiscID VARCHAR, TrackNo VARCHAR)")
Else
  Debug "Can't open database !"
  End
EndIf

path$="F:\Karaoke Songs\ALL SONGS SORTED\#mp3-wav + cdg\Code-Nr - Artist - Title\A 12\"
NewList FilesAndFolders.s()

found = SearchDirectory(path$, FilesAndFolders(), "*.mp3", 1)

ForEach FilesAndFolders()
  Pfad$=path$+FilesAndFolders()
  DatabaseUpdate(0, "INSERT INTO Songlist (Pfad, Dateiname, Artist, Title, DiscID, TrackNo) VALUES ('" + Pfad$ + "', '10', '', '', '', '')")
Next

CloseDatabase(0)

Debug found
UPS:
Hab das Problem schon gefunden:

Code: Alles auswählen

If CreateFile(0, DatabaseFile$)
  CloseFile(0)
Else
  Debug "Can't create the database file !"
  End
EndIf
...hat mir immer eine neue Datenbank Datei angelegt! ;)
PureBasic 6.00 | Windows 10 pro (x64)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Kiffi »

Du brauchst auch nicht ständig die Tabelle neu anzulegen. Das schlägt sowieso fehl, wenn sie bereits vorhanden ist. ;-)

Also: Datenbank vorhanden?

Wenn nicht -> CreateFile() -> OpenDatabase() -> CreateTable
Wenn ja -> OpenDatabase()

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Zerosurf »

du meinst diesen Abschnitt?

Code: Alles auswählen

If OpenDatabase(0, DatabaseFile$, "", "")
  DatabaseUpdate(0, "CREATE TABLE Songlist (IdNr INTEGER PRIMARY KEY, Pfad VARCHAR, Dateiname VARCHAR, Artist VARCHAR, Title VARCHAR, DiscID VARCHAR, TrackNo VARCHAR)")
Else
  Debug "Can't open database !"
  End
EndIf
PureBasic 6.00 | Windows 10 pro (x64)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Kiffi »

Zerosurf hat geschrieben:du meinst diesen Abschnitt?

Code: Alles auswählen

If OpenDatabase(0, DatabaseFile$, "", "")
  DatabaseUpdate(0, "CREATE TABLE Songlist (IdNr INTEGER PRIMARY KEY, Pfad VARCHAR, Dateiname VARCHAR, Artist VARCHAR, Title VARCHAR, DiscID VARCHAR, TrackNo VARCHAR)")
Else
  Debug "Can't open database !"
  End
EndIf
ja, genauer gesagt: die DatabaseUpdate()-Zeile

Jedes Mal, wenn Du die Datenbank öffnest, führst Du obigen Befehl aus. Das "Create Table ..." klappt allerdings nur einmalig wenn die Tabelle noch nicht vorhanden ist. PureBasic ist hier gutmütig und es kommt deshalb zu keinem Laufzeitfehler. Wenn Du ein "Debug DatabaseError()" hinter "DatabaseUpdate(0, "CREATE TABLE ..."" einfügst, wirst Du sehen, was ich meine.

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Beitrag von Zerosurf »

Alles klar vielen Dank! :allright:
PureBasic 6.00 | Windows 10 pro (x64)
Antworten