Ergebnis 1 bis 4 von 4

Thema: Datenbank mit zufällig generierten Einträgen/Suchfunktion (Delphi)

  1. #1

    Datenbank mit zufällig generierten Einträgen/Suchfunktion (Delphi)

    Hallo.
    Ich muss für meinen Informatikunterricht ein Programm mit Delphi coden und habe ein paar Probleme damit. Vielleicht kann mir hier jemand helfen, meine Fragen zu klären?

    Das Projekt soll eine Art Datenbank sein, die Kundendaten erfasst. Diese Kundendaten soll das Programm vorher (FormCreate) zufällig generiert (aus den Buchstaben A bis Z) und in einer Listbox gespeichert haben. Alle Zeichenketten haben 8 Zeichen lang zu sein, meinetwegen ABCDEFG.

    Wenn das fertig ist, brauche ich eine Suchfunktion, die die Listbox durchsucht und aus den vorhandenen Einträgen gezielt welche sucht, die die eingegebene Zahlenfolge irgendwo in sich selbst aufweisen. Mit dem gefundenen Ergebnis soll ein Editfeld, das ich vorher erstellt habe, gefüllt werden.


    Was ich bis jetzt habe (allerdings bekomme ich einen Error, wenn ich es ausführen will):
    Vielleicht kann mir jemand ein paar Fragen hierzu beantworten...
    Code:
    unit msuchen;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        edkunde: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        edkundennummer: TEdit;
        edumsatz: TEdit;
        edtyp: TEdit;
        ListBox1: TListBox;
        bt_suchen: TButton;
        Button2: TButton;
        Button3: TButton;
        Edit5: TEdit;
        Label3: TLabel;
        Label4: TLabel;
        bt_test: TButton;
        procedure bt_suchenClick(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
       
      private
        { Private-Deklarationen }
        kunde: string;
        ZArray : array['A'..'Z'] of char;
      public
        { Public-Deklarationen }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    
    
    procedure TForm1.bt_suchenClick(Sender: TObject);
    var i:integer;
    begin
    for i := 0 to Listbox1.Count -1 do
    begin
      if pos(listbox1.items[i], '<suchstr>') > 0 then ... //gefunden
    end;     
    
    procedure TForm1.FormCreate(Sender: TObject);
    var j:integer;
    i:integer;
    s:string;
    begin
      for j := 1 to 1000 do
      s := '        ';
      for i := 1 to 8 do
      begin
        s[i] := Chr(Random(26) + 65);
      end;
      listbox1.add( s);
    end;
    
    end.
    procedure TForm1.Button4Click(Sender: TObject);
    zuordnen(delimiter:char;
    quelle:string;
    var e1,e2,e3,e4:tedit)
    
    begin
    e1.text:=copy(quelle,1,pos(delimiter,quelle)-1);
    delete(quelle,1,ps(delimiter,quelle));
    e2.text:=copy(quelle,1,pos(delimiter,quelle)-1);
    
    ---
    
    {zuordnen('#',kundenbox.items[i],edname,edkundennummer,
    edumsatz,edtyp);
    end;    }
    So sieht es bis jetzt aus, und einige Teile funktionieren sogar, aber der Rest...nun:


    Code:
    procedure TForm1.FormCreate(Sender: TObject); 
    var j:integer;
    i:integer; 
    s:string; 
    begin for j := 1 to 1000 do 
    s := ' '; 
    for i := 1 to 8 do begin 
    s[i] := Chr(Random(26) + 65); end; 
    listbox1.add( s); 
    end;

    Aus j, i und s habe ich Variablen gemacht.
    Nun funktioniert das Einfügen in die Listbox (Listbox1) aber nicht, kann mir jemand erklären, wie ich das ändern könnte, sodass es funktioniert?
    Und was mache ich mit listbox1.add( s);?

    Code:
    begin
    procedure TForm1.bt_suchenClick(Sender: TObject);
    var i:integer;
    begin
    for i := 0 to Listbox1.Count -1 do
    begin
      if pos(listbox1.items[i], '<suchstr>') > 0 then ... //gefunden
    end;
    Das gehört zur Suchfunktion.

    Könnte man das Ergebnis der Suche so in das Editfeld schreiben:
    if pos(listbox1.items[i], '<suchstr>') > 0 then edit1.caption + 'ergebnis'?
    'ergebnis' müsste irgendetwas mit einem Listbox-Index oder so sein, glaube ich.
    Weiß das vielleicht jemand?

    Wäre sehr nett, wenn mir jemand helfen könnte.

  2. #2
    Versuche es mal so ...

    Code:
    procedure TForm1.FormCreate(Sender: TObject); 
    var i,j:integer;
        s  :string; 
    begin                                  { Begin der Prozedur }
    for j := 1 to 1000 do                  { Fuehre Schleife 1000x aus }
     begin                                 { Begin der Schleife }
      s := ' ';                            { Loesche den alten String }
      for i := 1 to 8 do                   { Jeder String hat 8 Zeichen zu haben}
         s := s + Chr(Random(26) + 65);    { Fuege dem String ein Zufallszeichen hinzu }
      listbox1.add(s);                     { Wenn String komplett fuege ihn der Liste hinzu }             
     end;                                  { Ende der Schleife }
    end;                                   { Ende der Prozedur }
    Der zweite Teil ist fast richtig, aber es muss Edit1.Text und nicht Edit1.Caption heissen. Ausserdem muss es entweder Edit1.Text := 'ergebniss'; heissen oder Edit1.Text := Edit1.Text + ' ergebniss'; nicht aber, wie du schriebst Edit1.Caption + 'ergebniss'; Zudem hast du ein Begin zu viel drin .. wieso sollte das vor der Procedur stehen ? Und dann fehlt auch noch ein end; um die Procedur abzuschliessen ... hier mal der Code nochmal richtig

    Code:
    procedure TForm1.bt_suchenClick(Sender: TObject);
    var i:integer;
    begin                                                     { Begin der Prozedur }
    Edit1.Text := '';                                         { Loesche das Textfeld der Ergebniszeile }
    for i := 0 to Listbox1.Count -1 do                        { Fuehre Schleife fuer jeden Eintrag in Liste aus }
     begin                                                    { Begin der Schleife }
      if pos(listbox1.items[i], '<suchstr>') > 0 then         { Ist <suchstring> im Eintrag enthalten, also Position > 0 }
        if Edit1.Text <> ''                                   { Dann pruefe, ob Textfeld noch leer ist }
          then Edit1.Text := Edit1.Text + ', ' + inttostr(i)  { Ist es nicht leer, so fuege den Listenindex mit Komma getrennt dem Ergebnis hinzu }
          else Edit1.Text := inttostr(i);                     { Ist es leer (also erstmals etwas gefunden), brauchen wir kein Komma }
     end;                                                     { Ende der Schleife }
    end;                                                      { Ende der Prozedur }
    Hoffe, das bringt dich weiter ...
    Der Code ist aus dem Kopf geschrieben und nicht auf fehler geprueft, sollte aber funktionieren.

  3. #3
    Vielen lieben Dank, das bringt mich viel weiter.
    Besonders deine Kommentare dazu helfen mir sehr, danke.

  4. #4
    Hallo,
    ich habe da mal noch eine Frage zu...
    ich muss sowas ähnliches machen und habe deinen quelltext übernommen, jedoch macht er mir da einen Fehler den ich nicht beheben kann....
    listbox1.add(s)macht er mir einen fehler undzwar undefinierter bebutzer(add)... was soll das??
    kann es daran liegen das ich noch delphie 4 habe???
    bitte helft mir danke im voraus

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •