Datenbank-Attribute auslesen

Ich habe hier schon sehr herumgesucht, komme beim Auslesen von Atrributen aber nicht weiter:

var
  Item: IPlaylistItem;
  Meta: IMetaDataHandler;
  Data: string;

begin
  Item := CurrentPlaylist.GetItem(0);
  Meta := Factory.CreateMetaDataHandler(Item.AsFile);
  Data := Meta.GetTagData('Album');
  SystemLog(Data);
end.
 

Laufen tut es, freilich nicht mit dem gewüschten Ergebnis, es wird nur eine leere Zeile ins Log geschrieben. Bin ich auf dem falschen Dampfer? Heißen die Attribute auch so, wie sie in der Datenbank angezeigt werden (also nicht etwa 'Year' statt 'Jahr' usw.)?

Unwissende Grüße

TSD

Sollen die wirklich neu aus der Datei ausgelesen werden? Oder nur die vorhanden Attribute aus dem PlaylistItem?

Letzteres.    

Item.GetAttributes.GetValue('Album');

1 Like

Es kann so einfach sein. Danke!!

Darf ich gleich noch eine Frage anhängen? Ebenfalls nur in der Playlist ein „Custom Tag“ anhängen, beschreiben und auslesen, nur für die Funktion „hab ich schon behandelt, brauche ich nicht mehr“. Ebenfalls so schlank?

Item.GetAttributes.SetValue('HabSchon', 'ja');

1 Like

Ganz lieben Dank!! :heart:

Kann ich die mit GetAttributes ausgelesenen Attribute auch komplett in ein anderes/neues Element zurückschreiben? (Ein SetAttributes kann ich nicht finden.)

Die Methode GetAttributes ist erstmal nur der Zugriff auf das Attribute-Objekt (vom Typ IStrings, also eine StringList mit Einträgen der Form key=value). Deswegen gibt es kein SetAttributes, sondern man verwendet die Set...-Methoden des zurückgelieferten IStrings-Objektes.

Für das Umkopieren gibt es die Methode IStrings.Assign:

Item2.GetAttributes.Assign(Item1.GetAttributes);
1 Like

Danke! Genau an dieser Stelle dann scheitert mein Verständnis der Objekt-Methoden-Typ-und-sonstwas-Hierarchie.

Hättest du mal was Ordentliches gelernt :stuck_out_tongue:

1 Like

Leider unterstützt Pascal Script keine Properties für Interfaces, daher muss man immer explizit die Getter und Setter aufrufen. In Delphi kann ich direkt schreiben:

Item1.Attributes.Assign(Item2.Attributes);

Bei einer Property handelt es sich um ein virtuelles Feld/Eigenschaft, das automatisch die passende Get/Set-Methode aufruft je nachdem, ob man es lesend oder schreibend verwendet. So sind in Delphi auch die folgenden Aufrufe identisch:

Item1.Title := 'hahaha';
Item1.SetTitle('hahaha');

Aber in Pascal Script geht das leider nicht.

1 Like