Datenbank mit discs.txt
-
Tool nicht, aber ich kann dir einen Auszug aus meinem VBA-Programm geben.
'--------------------------------------------------------------------------<br />'Funktion : CDInDatenbank<br />'Beschreibung : Überprüft, ob eine übergebene CD bereits in der Datenbank<br />' vorhanden ist<br />'Version : 1<br />'Autor : Der langhaarige Bombenleger<br />'Parameter : SerienNr = Serien-Nr aus CDPlayer.ini<br />' Interpret = Interpretenname<br />' Album = Albenname<br />' MeldungAnzeigen = True, wenn eine Meldung angezeigt werden<br />' soll, wenn die CD schon vorhanden ist<br />'Rückgabewert : True, wenn alles geklappt hat<br />'Beispiel : CDInDatenbank("[227A552]", "Rockhard-Magazin", "Dynamit Vol. 44")<br />'--------------------------------------------------------------------------<br /><br />Public Function CDInDatenbank(SerienNr As String, _<br /> Interpret As String, _<br /> Album As String, _<br /> Optional MeldungAnzeigen As Boolean = False) As Boolean<br />Dim intStatus As Integer '1= CD ist in der Datenbank vorhanden<br /> ' (kein Fehler)<br /> '2= CD ist unter anderem Albennamen gespeichert<br /> '4= CD ist unter anderem Interpreten vorhanden<br /> '5= CD ist unter anderem Albennamen<br /> ' & Interpreten vorhanden<br />Dim strMeldung As String<br />Dim rstSuchen As DAO.Recordset<br /><br />Set rstSuchen = CodeDb.OpenRecordset("SELECT * FROM Alben " & _<br /> "WHERE SerienNr = '" & SerienNr & "'")<br /><br />If Not rstSuchen.EOF Then<br /> CDInDatenbank = True<br /> intStatus = 1<br /> If Album <> rstSuchen!Albenname Then<br /> intStatus = intStatus + 1<br /> End If<br /> <br /> If Interpret <> Nz(DLookup("Interpret", _<br /> "Interpreten", "InterpretenID=" & rstSuchen!InterpretenID), "") Then<br /> intStatus = intStatus + 3<br /> End If<br /> <br /> If intStatus > 1 And MeldungAnzeigen Then<br /> Select Case intStatus<br /> Case 2 'Anderer Albenname<br /> strMeldung = "CD ist unter anderem Albenname eingetragen!"<br /> Case 4 'Anderer Interpret<br /> strMeldung = "CD ist unter anderem Interpreten eingetragen!"<br /> Case 5 'Anderer Albenname & Interpret<br /> strMeldung = "CD ist unter anderem Albenname & " & _<br /> "Interpreten eingetragen!"<br /> End Select<br /> <br /> MsgBox strMeldung, vbCritical + vbOKOnly, "CD-Datenbank"<br /> End If<br />Else<br /> CDInDatenbank = False<br />End If<br />rstSuchen.Close<br />End Function<br /><br />'--------------------------------------------------------------------------<br />'Prozedur : FindDiscDiscs<br />'Beschreibung : Sucht in der Discs.txt nach Audio-CDs. Wird eine CD<br />' gefunden, so werden die Ergebnisse an die String-Parameter<br />' zurückgegeben.<br />'Version : 2 : Anpassung an mehrere Schnittstellen<br />'Autor : Der langhaarige Bombenleger<br />'Parameter : CDDBID = Disc-ID mit der auch die CD auf den FreeDB-<br />' Servern eindeutig identifiziert wird<br />' Serialnumber = Seriennummer der gefundenen CD<br />' (Achtung! hat nicht mit der CDDBID gemein!)<br />' Artist = Interpret der CD<br />' Title = CD-Titel<br />'Beispiel : Call FindDiscDiscs(strCDDBID, strSerialnumber, strArtist,<br />' strTitle, DateiNr) In den Stringvariablen stehen<br />' dann die Informationen der gefundenen CD.<br />'--------------------------------------------------------------------------<br /><br />Private Sub FindDiscDiscs(ByRef CDDBID As String, _<br /> ByRef Serialnumber As String, _<br /> ByRef Artist As String, _<br /> ByRef Title As String, _<br /> QuellDateiNr As Integer)<br /> <br />'CDDBID:0D0B1312<br />'[18D0754]<br />'artist=Sesamstraße<br />'title=Die schönster Lieder<br />'numtracks=18<br />'compilationdisc=No<br />'Genre=Pop<br />'Year=1994<br />'comment=<br />'0=Quietsche-Entchen<br />'...<br />'17=Denn Keks schmeckt lecker, lecker, lecker<br />'frames=33,10895,21498,37220,47630,60235,74233,<br />'order=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<br /><br />While Not Left(Artist, 7) = "artist=" And Not EOF(QuellDateiNr)<br /> <br /> If (Left(Artist, 7) <> "artist=") Or _<br /> (Left(Artist, 6) <> "Title=") Then<br /> CDDBID = Serialnumber<br /> Serialnumber = Artist<br /> Artist = Title<br /> End If<br /> <br /> If Not EOF(QuellDateiNr) Then<br /> Line Input #QuellDateiNr, Title<br /> End If<br />Wend<br /><br />End Sub<br /><br />'--------------------------------------------------------------------------<br />'Prozedur : SongsLesenDiscs<br />'Beschreibung : Liest Songs aus der Discs.txt in die temporäre Tabelle<br />' tmpCDPlayerINIImportSongs ein<br />'Version : 2 : Anpassung an mehrere Schnittstellen<br />'Autor : Der langhaarige Bombenleger<br />'Parameter : QuelldateiNr = Datei-Nr. auf die zugegriffen wird<br />' SerienNr = Serien-Nr aus CDPlayer.ini<br />'Beispiel : CallSongsLesenINI(1, "[123456]")<br />'--------------------------------------------------------------------------<br /><br />Private Sub SongsLesenDiscs(ByVal QuellDateiNr As Integer, _<br /> ByVal SerienNr As String)<br />Dim Track As String<br />Dim TrackName As String<br />Dim TrackNr As String<br />Dim rstSongs As Recordset<br />Dim varFrames As Variant<br />Dim i As Integer<br /><br />Set rstSongs = CodeDb.OpenRecordset("SELECT * FROM tmpCDPlayerINIImportSongs " & _<br /> "WHERE SerienNr = '" & SerienNr & "'")<br /> <br />If Not rstSongs.EOF Then<br /> MsgBox "Es sind bereits Songs zu dieser Serien-Nr. vorhanden! Serien-Nr. nicht eindeutig!", _<br /> vbOKOnly + vbCritical<br /> Exit Sub<br />End If<br /><br />With rstSongs<br /> 'Songs erstmal einlesen<br /> Do<br /> If Not EOF(QuellDateiNr) Then<br /> Line Input #QuellDateiNr, Track<br /> End If<br /> If (Left(Track, 7) <> "frames=" And _<br /> IsNumeric(Left(Track, InStr(Track, "=") - 1)) = True) And Track <> "" Then<br /> .AddNew<br /> .Fields("SerienNr") = SerienNr<br /> TrackNr = Left(Track, InStr(Track, "=") - 1)<br /> .Fields("Nr") = CInt(TrackNr) + 1<br /> .Fields("Titel") = IIf(Len(Right(Track, Len(Track) - _<br /> InStr(Track, "="))) = 0, "(No Name)", Right(Track, Len(Track) - InStr(Track, "=")))<br /> .Update<br /> Track = ""<br /> End If<br /> <br /> Loop Until Left(Track, 7) = "frames=" Or EOF(QuellDateiNr)<br /> <br /> 'Start-Frames sind erst am Ende eingetragen, deswegen eine zweite Schleife<br /> varFrames = Split(Mid(Track, 8), ",")<br /> .MoveFirst<br /> 'Debug.Print .RecordCount<br /> 'If Not .EOF Then<br /> For i = 0 To UBound(varFrames) - 1<br /> .Edit<br /> If InStr(varFrames(i), "(") > 0 Then<br /> .Fields("Frame") = Left(varFrames(i), InStr(varFrames(i), "(") - 1)<br /> Else<br /> .Fields("Frame") = varFrames(i)<br /> End If<br /> .Update<br /> .MoveNext<br /> Next i<br /> 'End If<br />End With<br />End Sub<br /><br />'--------------------------------------------------------------------------<br />'Prozedur : StandardDiscsAuswahl<br />'Beschreibung : Liest die CD-Header (Interpret, Album, Seriennr...) aus der<br />' Discs.txt. Die Ergebnisse werden dabei in einem<br />' Listview abgespeichert. Zusätzlich wird überprüft, ob die<br />' CD schon in der Datenbank vorhanden ist. Ist die CD nicht<br />' vorhanden, so wird bei dieser CD dann im Listview ein<br />' Haken gesetzt.<br />'Version : 2 : Anpassung an mehrere Schnittstellen<br />'Autor : Der langhaarige Bombenleger<br />'Beispiel : Call StandardDiscsAuswahl()<br />'--------------------------------------------------------------------------<br /><br />Private Sub StandardDiscsAuswahl()<br />Dim Quelldatei As String<br />Dim DateiNr As Integer<br /><br />Dim strCDDBID As String<br />Dim strSerialnumber As String<br />Dim strArtist As String<br />Dim strTitle As String<br />Dim litmEintrag As MSComctlLib.ListItem<br /><br />Me.CDsAnzeigen.ListItems.Clear<br />Me.CDsAnzeigen.ColumnHeaders.Clear<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "Interpret", 2000<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "Album", 2500<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "Jahr", 540<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "Musikstil", 1200<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "CDDBID", 1000<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "Serien-Nr.", 1000<br />Me.CDsAnzeigen.ColumnHeaders.Add , , "Sampler", 800<br /><br />Quelldatei = "C:\Programme\Audiograbber\Discs.txt"<br />CodeDb.Execute ("DELETE * FROM tmpCDPlayerINIImportSongs")<br /><br />If Nz(Dir(Quelldatei), "") = "" Then<br /> MsgBox Quelldatei & " konnte nicht gefunden werden! " & _<br /> "Import nicht möglich!", vbOKOnly + vbCritical, "Datei nicht gefunden"<br /> DoCmd.Close acForm, Me.Name, acSavePrompt<br /> Exit Sub<br />End If<br /><br />DateiNr = FreeFile<br />Open Quelldatei For Input As #DateiNr<br />DoCmd.Hourglass True<br /> <br />Do<br /> 'Variablen vom letzten Schleifendurchgang leeren<br /> strCDDBID = ""<br /> strSerialnumber = ""<br /> strArtist = ""<br /> strTitle = ""<br /> <br /> Call FindDiscDiscs(strCDDBID, strSerialnumber, strArtist, strTitle, _<br /> DateiNr)<br /> If Not EOF(DateiNr) Then<br /> Set litmEintrag = Me.CDsAnzeigen.ListItems.Add(, , _<br /> Mid(strArtist, 8)) '"Item=" & str(Me.CDsAnzeigen.ListItems.Count + 1)<br /> litmEintrag.SubItems(1) = Mid(strTitle, 7)<br /> litmEintrag.SubItems(4) = Mid(strCDDBID, 8)<br /> litmEintrag.SubItems(5) = strSerialnumber<br /> <br /> 'Restliche Informationen aus Schnittstelle lesen<br /> Do<br /> If Left(strTitle, 16) = "compilationdisc=" Then<br /> litmEintrag.SubItems(6) = IIf(Mid(strTitle, 17) = "yes", "Ja", "Nein")<br /> End If<br /> <br /> strArtist = strTitle<br /> Line Input #DateiNr, strTitle<br /> Loop Until Left(strTitle, 5) = "year=" Or EOF(DateiNr)<br /> <br /> 'Informationen dann in Listitem schreiben<br /> If Not EOF(DateiNr) Then<br /> litmEintrag.SubItems(2) = Mid(strTitle, 6) 'Jahr<br /> litmEintrag.SubItems(3) = Mid(strArtist, 7) 'Musikstil/Genre<br /> End If<br /> <br /> litmEintrag.Checked = Not CDInDatenbank(strSerialnumber, strArtist, strTitle, False)<br /> Call SongsLesenDiscs(DateiNr, strSerialnumber)<br /> <br /> End If<br />Loop Until EOF(DateiNr)<br /><br />DoCmd.Hourglass False<br /><br />End Sub
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
