Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Suchen nach jahren in einer Db

  Alt 26. Mär 2006, 17:11
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:
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 hoffe da blick jemmand durch:
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ß !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat