AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Buchstabensalat in Access-Tabelle
Thema durchsuchen
Ansicht
Themen-Optionen

Buchstabensalat in Access-Tabelle

Ein Thema von Sicho · begonnen am 21. Aug 2006 · letzter Beitrag vom 21. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#1

Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 05:32
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Hallo,

in meinem Programm lese ich MP3-Dateien aus einem Folder und schreibe sie untereinander in eine ListBox.

Danach ermittle ich für jede MP3-Datei die ID3-Tags, und zwar mit dem Code den man unter Delphi-Source finden kann. Dieser Code funktioniert auch einwandfrei.

Was ich nun tun will, ist für jede Datei einen Eintrag in einer Tabelle einer Access-Datenbank anzulegen. Die DB und die Tabelle habe ich in Access selbst kreiert. Ich greife mit einer ADOConnection auf die Datenbank zu. Mittels ADOQuery und folgendem Code fülle ich dann die Tabelle namens 'tblID3':

Delphi-Quellcode:
 for I := 0 to lbResults.Count - 1 do
         begin
          Read_ID3Tag(lbResults.Items[I]); //hier lese ich die ID3-Tags aus
          ADOQuery1.SQL.Text := 'SELECT * FROM '+'tblID3'+' WHERE 0=1';
          ADOQuery1.Open;
          ADOQuery1.Append;
          ADOQuery1['ListID'] := I;
          ADOQuery1['ID'] := ID3Tag.ID;
          ADOQuery1['Title'] := ID3Tag.Title;
          ADOQuery1['Artist'] := ID3Tag.Artist;
          ADOQuery1['Album'] := ID3Tag.Album;
          ADOQuery1['Year'] := ID3Tag.Year;
          ADOQuery1['Comment'] := ID3Tag.Comment;
          ADOQuery1['Genre'] := ID3Tag.Genre;
          ADOQuery1['Sample'] := ID3Tag.Sample;
          ADOQuery1['Length'] := ID3Tag.Length;
          ADOQuery1['Bits'] := ID3Tag.Bits;
          ADOQuery1['Vers'] := ID3Tag.Vers;
          ADOQuery1['Layers'] := ID3Tag.Layers;
          ADOQuery1.Post;
         end;
An und für sich funktioniert dies auch prächtig, NUR nicht jedesmal. Wenn ich jetzt mehrere MP3's in die Listbox schreiben lasse und dann bei einer nach der anderen die ID3-Tags auslese und sie dann in die Tabelle schreibe, habe ich bei vielen Einträgen nur Buchstabensalat... z.B. nur "UUUUUU" bei Stringfeldern oder "aaaaaaaaa".
Auffällig ist, dass es jedesmal bei den gleichen Files auftritt. Also dachte ich natürlich gleich "Fehler beim Auslesen der ID3-Tags". Allerdings habe ich den Code von Delphi-Source mehrmals überprüft und die Zugriffe auf den Header etc. auch mit MP3-Header-Informationen aus dem Netz (z.B. mp3-tech) überprüft - und da scheint echt alles zu passen.

Demzufolge glaube ich daran, dass ein Fehler beim Einfügen der Daten in die Tabelle unterläuft. Ist es vielleicht irgendeine Einstellung bei der ADOQuery-Komponente oder bei der ADOConnection? Ich hab' mich ehrlich gesagt noch nicht soviel mit DB's in Delphi beschäftigt und bin deshalb auf dem Gebiet recht unerfahren, weswegen ich denke, dass ich ja irgendeine Kleinigkeit übersehen haben könnte.

Achja, was vielleicht noch wichtig ist: Ich bekomme beim Ausführen meines Programmes, sobald ich beginne, die Werte in die DB zu schreiben, die Compilermeldung "Der schreibgeschützte Eigenschaftswert wurde nicht festgelegt". Ich kann dann allerdings auf "Continue" drücken und das Programm läuft ohne Problem weiter - bis halt eben diesen Buchstabensalat bei manchen Einträgen ausgenommen. Kann diese Meldung evtl. auf das eigentliche Problem hinweisen?

Ich hoffe ja jetzt dass es sich nur um einen typischen Anfängerfehler handelt - dann wird's nämlich recht leicht zu beseitigen sein *gg* In dem Sinne bin ich auf eure Antworten gespannt.

Grüße,
Sicho
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 08:26
Ich würde das Einfügen in die Access-Tabelle anders machen. Zum Einfügen eignet sich INSERT besser. Da immer das gleiche Statement ausgeführt wird, bieten sich auch Parameter an:

Delphi-Quellcode:
ADOQuery1.SQL.Text := 'insert into tblID3 values( :lid, :id, :title, :artist, ...)';
for I := 0 to lbResults.Count - 1 do
begin
          Read_ID3Tag(lbResults.Items[I]); //hier lese ich die ID3-Tags aus
          
          ADOQuery1.Open;
          ADOQuery1.Append;
          ADOQuery1.Parameters.ParamByName('lid').Value:= I;
          ADOQuery1.Parameters.ParamByName('ID').Value := ID3Tag.ID;
          ....
          ADOQuery1.ExecSql;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 12:21
Wenn ich den Code wie von dir angegeben umschreibe, bekomme ich bei der Ausführung folgende Fehlermeldung:

Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.

Tippfehler sind keine drin. Hab' ich was übersehen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 12:24
Mein Code war ja verkürzt. Poste nochmal den ganzen abgeänderten Block.
Markus Kinzler
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 12:27
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'insert into tblID3 values (:ListID, :ID, :Title, :Artist,'+
              ':Album, :Year, :Comment, :Genre, :Sample, :Length, :Bits, :Vers,'+
              ' :Layers)';
       for I := 0 to lbResults.Count - 1 do
         begin
          Read_ID3Tag(lbResults.Items[I]); //hier lese ich die ID3-Tags aus
         
          ADOQuery1.Open;
          ADOQuery1.Append;
          ADOQuery1.Parameters.ParamByName('ListID').Value:= I;
          ADOQuery1.Parameters.ParamByName('ID').Value := ID3Tag.ID;
          ADOQuery1.Parameters.ParamByName('Title').Value := ID3Tag.Title;
          ADOQuery1.Parameters.ParamByName('Artist').Value := ID3Tag.Artist;
          ADOQuery1.Parameters.ParamByName('Album').Value := ID3Tag.Album;
          ADOQuery1.Parameters.ParamByName('Year').Value := ID3Tag.Year;
          ADOQuery1.Parameters.ParamByName('Comment').Value := ID3Tag.Comment;
          ADOQuery1.Parameters.ParamByName('Genre').Value := ID3Tag.Genre;
          ADOQuery1.Parameters.ParamByName('Sample').Value := ID3Tag.Sample;
          ADOQuery1.Parameters.ParamByName('Length').Value := ID3Tag.Length;
          ADOQuery1.Parameters.ParamByName('Bits').Value := ID3Tag.Bits;
          ADOQuery1.Parameters.ParamByName('Vers').Value := ID3Tag.Vers;
          ADOQuery1.Parameters.ParamByName('Layers').Value := ID3Tag.Layers;
          ADOQuery1.ExecSql;
         end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 12:32
.Open und .Append sind natürlich überflüssig. U.U. muß man die Paramter, die standardmäßig Varianten sind auch einen Typ mitgeben z.b. .asString statt .Value.
Markus Kinzler
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 12:38
Erstmal danke für den Vorschlag.

Die "schreibgeschützte Eigenschaftswert"-Meldung taucht nun nicht mehr auf.

Am Buchstabensalat in der Tabelle ändert es allerdings nichts. Also doch ein Fehler beim ID3-Tags auslesen? (ist haargenau der gleiche Code wie im ersten Posting verlinkt, nur dass aus "dauer" bei mir "Length" wurde) Oder passiert beim Schreiben in die Tabelle irgendeine Dummheit, die nicht beachtet wurde?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 12:44
Hast du dir die Werte schonmal im Debugger angesehen?
Markus Kinzler
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 13:04
Mist, hätt' ich eher machen sollen *gg*

Die Werte stehen schon im ID3Tag record falsch... also liest er sie so aus den MP3-Files.
Damit kann ja schon mal ein Fehler beim Schreiben der Tabelle ausgeschlossen werden.

Nun wär es halt noch intressant zu wissen warum er z.B. "aaaaaaaaaaaa" statt den richtigen Wert von "Artist" ausliest. Die ID3-Tags der Files selbst sind alle richtig gesetzt, da steht nirgends "aaaaaa" oder ähnliches drin, sondern nur "echte" Werte.
Mal sehen ob ich im Read_ID3Tag-Code 'nen Fehler finde...
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Buchstabensalat in Access-Tabelle

  Alt 21. Aug 2006, 15:44
Wikipedia schreibt zum Thema ID3-Tags unter anderem folgendes:

Die Zusatzinformationen werden in einem Block vor oder nach den Audio Daten (dem MPEG-Stream) in die Datei eingefügt. Den Beginn eines ID3-Blockes erkennt man anhand des Headers (Version ID3v2)

Leider kann find' ich im praktisch unkommentiertem Code von Delphi-Source nicht heraus, ob er nur vor resp. nur nach den Audio Daten nach dem ID3-Tag sucht.
Wenn er nämlich nur eines der beiden macht, ist es klar, dass er manchmal falsche Daten ausliest, was dann mein Problem erklären würde.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz