![]() |
Suchen nach jahren in einer Db
Hallo,
ich habe mir die Freeware DB von Cd titeln runtergeladen. jetzt habe ich eine index datei erstellt. die so aufgebaut ist: DisId|Titel|Jahr|MusikRichtung jetzt wollte ich folgendes machen: ich möchte erfahren z.b. welche cd Titel im jahr 2004 erschienen sind also habe ich folgende procedure geschrieben:
Delphi-Quellcode:
ich hoffe da blick jemmand durch:
procedure TForm1.BitBtn2Click(Sender: TObject);
var Text1,Text2:TextFile; str,line,s,s2:String; p,i,z,index,l:Integer; test:TListItem; begin ListBox2.Clear; Listview1.Clear; AssignFile(Text1,Edit5.Text); Reset(Text1); AssignFile(Text2,Edit1.Text); Reset(Text2); p:=-1; z:=0; Label9.Caption:='Los...'; Label9.Update; Label9.Repaint; // Die richtige Position finden while not EOF(Text1) do begin if (c2 = True) or (cancel = True) then break; Application.ProcessMessages; ReadLN(text1,str); if Edit2.Text <> '' then begin // Disc-ID if pos(edit2.text,str) > 0 then begin s:=GetToken(str,'|',2); // Position auslesen break; end; end; index:=0; i:=0; if Edit4.Text <> '' then begin if pos(edit4.text,str) > 0 then begin index:=StrToInt(GetToken(str,'|',2)); while not EOF(text2) do begin if (cancel = True) then break; Application.ProcessMessages; Readln(text2, line); inc(i); if i >=index then begin // if pos('DISCID',line) > 0 then // ShowMessage(line + #13 + str); if Pos(GetToken(str,'|',1),line) > 0 then begin ListView1.Items.Add; ListView1.Items[ListView1.items.count-1].Caption:=GetToken(line,'=',2); end; if (Pos('DTITLE',line) > 0) and (z = 0) then begin ListView1.Items[ListView1.items.count-1].SubItems.Add(GetToken(line,'=',2)) end; if (Pos('DTITLE',line) > 0) and (z = 1)then ListView1.Items[ListView1.items.count-1].SubItems.Add(GetToken(line,'=',2)); if Pos('DYEAR',line) > 0 then begin ListView1.Items[ListView1.items.count-1].SubItems.Add(GetToken(line,'=',2)); end; if Pos('DGENRE',line) > 0 then begin ListView1.Items[ListView1.items.count-1].SubItems.Add(GetToken(line,'=',2)); break; end; { if Pos('TTITLE',line) > 0 then begin str:=Copy(line,7,7); ListBox2.items.Add(str + ' ' + GetToken(line,'=',2)); end;} // end; end; end; end; end; // if edit4 <> '' end; Label9.Caption:='gefunden...'; Label9.Update; Label9.Repaint; Ich öffne zuerst die index datei in der suche ich die angaben jahres zahle habe ich die suche ich in der zweiten datei(in der eigentlichen db) die angeben position rauß. Und sobalt ich die habe füge ich die daten der ListView hinzu. problem ist jetzt er fügt nur ein eintrag hinzu. schreibe ich jetzt bei DJahr ein ShowMessage hin sehe ich das dort die falschen jahre angezeigt werden. Ich hoffe einer kann mir ein kleinen tip geben was ich falsch gemacht habe. wahrscheinlich nur ein kleiner gedanken fehler. Frag mich aber nicht welcher. Vielen dank im vorauß ! |
Re: Suchen nach jahren in einer Db
Also was ist denn das für eine Datenbank ?
Wenn irgendwie geht, versuch über SQL darauf zuzugreifen, denn da wirds bei deiner gegebenen Spaltenangabe wirklich simpel:
SQL-Code:
select * from AlleLieder where Jahr = 2004
|
Re: Suchen nach jahren in einer Db
das ist ein Tar File aus keine db im eigentlichen sinne, das Tar File ist über 3 GB groß und die index datei ca 130 MB.
Da kann man nicht mit einfachen SQL befehlen drauf zugreifen.(Leider) |
Re: Suchen nach jahren in einer Db
Handelt es sich um die datenbank von freedb.org? Hier gibt es auch Tolls um die datei in Standard-datenabnken zu konvertieren.
z.B. in ![]() |
Re: Suchen nach jahren in einer Db
ja genau von freedb.org aber ich möchte gerne das orginal Tar Fiele pasen, weil ich habe keine DB ich habe nur Delphi 7 PE. Aber anernseits währe es einfach wenn ich sie in z.b. SQL umwandeln würde ?
und mir dann "einfach" nur noch unit/klassen suche die mit meine Delphi version zusammen arbeite ? dann bauche ich mir auch keine gedanken mehr über das suchen machen. Meine ziele mit dieser DB sind folgende: 1. Ich möchte schnell nach DISC-IDS,Jahre und Titeln suchen können darum die index datei. Kann man in der DB schneller suchen als in dem TAR fiele ? würde dann auch die index datei entfallen ? 2. Möchte ich die möglichkeit haben die DISC-ID selbst auszurechnen also z.b. du gibt verzeichnise an wo du cd geript hast pro Verzeichnis eine CD dann könnte ich ja einfach die DiSC-ID errechnen(steht besimmt irgenwo wie das geht) danach in der DB suchen und die infos übernehmen das ist nänlich mein eigentliches vorhaben und neben bei wollte ich den umgang mit "großen" dateien "üben" habe noch ein paar probelem große integer daten typen zu finden wegen der datei größe ich habe jetzt einen LogInt genommen. Wenn das mit der konvertierung vom Tar nach sql geht oder in einer ander und mein vorhaben damit relisierbar ist mache ich das auf diesem weg. Warum das rad immter neu erfinden ? |
Re: Suchen nach jahren in einer Db
|
Re: Suchen nach jahren in einer Db
vielen dank werde ich ausprobieren !
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz