Seite 1 von 1

Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 06.11.2015 04:58
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?

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 06.11.2015 09:19
von Kiffi
Das ForEach gehört direkt um das DatabaseUpdate(). Das DatabaseQuery() brauchst Du in diesem Fall nicht.

Grüße ... Peter

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 09.11.2015 18:00
von Zerosurf
Wohin genau?

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

LG

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 09.11.2015 18:16
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 !

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 11.11.2015 14:41
von Zerosurf
Super - vielen Dank!

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 18.11.2015 18:04
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! ;)

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 18.11.2015 19:54
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

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 18.11.2015 21:38
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

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 18.11.2015 21:52
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

Re: Directory scannen und Inhalt in Datenbank sql schreiben

Verfasst: 19.11.2015 17:57
von Zerosurf
Alles klar vielen Dank! :allright: