Delphi

Von: , Frage gestellt am Fr, 1. Okt 1999

In meinem Adressdatenbank-Programm muß ich immer wieder Personen aus der gleichen Stadt abspeichern. Da wäre es doch ganz praktisch, daß mein Programm das Feld Ort selbständig ausfüllt, wenn ich die Postleitzahl eingegeben habe.
Wer weiss, wie man sowas realisiert?

7 Antworten zu dieser Frage

  1. Antwort von nach 23 Minuten hilfreich
    Re: Delphi

    Kommt drauf an, wie die Daten vorliegen.

    Sagen wir mal du schreibst alle Postleitzahlen und deren Orte von Deutschland in ein Textfile im Format

    xxxxx Stadt

    Deutsche PLZs haben ja glaub 5 Ziffern.

    In dem Fall würd ich das in eine String-Liste laden.

    Wie auch immer du das machst, die "Technik" besteht darin, dass du die gegebene Postleitzahl (der Einfachheit halber als String, ginge auch numerisch (z.B. Cardinal)
    mit gültigen PLZs vergleichts und den passenden Ort dann ins Edit-Feld schreibst.

    PLZlist : TStringList;

    Z.B:procedure TForm1.Button1Click(Sender: TObject);

    var
    HelpVar : Integer;

    begin
    for HelpVar := 0 to (PLZlist.Count - 1) do
    if (Edit1.Text = Copy(PLZlist.Strings[HelpVar], 1, Pos(' ', PLZlist.Strings[HelpVar]) - 1)) then
    Edit2.Text := Copy(PLZlist.Strings[HelpVar], Pos(' ', PLZlist.Strings[HelpVar]) - 1, Length(PLZlist.Strings[HelpVar]) - Pos(' ', PLZlist.Strings[HelpVar])+ 3);
    end;

    procedure TForm1.FormCreate(Sender: TObject);

    var
    PLZfile : TextFile;
    HelpStr : string;

    begin
    PLZlist := TStringList.Create;
    AssignFile(PLZfile, 'cities.txt');
    Reset(PLZfile);
    while not EOF(PLZfile) do
    begin
    ReadLn(PLZfile, HelpStr);
    PLZlist.Add(HelpStr);
    end;
    CLoseFile(PLZfile);
    end;

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    PLZlist.Free;
    end;

    • Antwort von nach 3 Stunden hilfreich
      Re^2: Delphi

      ..behaupte mal Stringlist wird bissen langsam und evtl zu gross..
      ich hab sowas mal auf DB-Basis gebaut.
      Bei eindeutigen PLZ wird der Ort selbsttätig
      ermittelt, ansonsten gibts ein Auswahlfenster. Wenn du Interesse hast schick ich mal ein Beispielprojekt nebst Datenbank. Bei Interesse melde dich unter
      [E-Mail-Adresse entfernt]

      • Antwort von nach 4 Stunden hilfreich
        Re^3: Delphi

        ..behaupte mal Stringlist wird bissen
        langsam und evtl zu gross..
        ich hab sowas mal auf DB-Basis gebaut.
        Ob DB_Zugriffe wirklich schneller sind,ist jetzt ne andere Frage :)

        Wenn du die Strings auf ne fixe Länge setzt, zum Beispiel 100 Chars kannst auch alle in einem Block aus einem binär-File lesen, anstatt Linie für Linue

        • Antwort von nach 19 Stunden hilfreich
          Re^4: Delphi

          in meiner Orts -DB gibts 41291 Ort-PLZ-Kombinationen...Viel Spass beim Durchsuchen der Stringlist ;o) [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach 4 Stunden hilfreich
      Re^2: Delphi

      Kommt drauf an, wie die Daten vorliegen.

      Ich wollte eigentlich nicht wochenlang Postleitzahlen eintippen, sondern dachte, daß sich die Datenbank sozusagen von selbst aufbaut. Also: wenn ixh einmal eine Plz mit der betreffenden Stadt eingegeben habe, dann erscheint beim nächsten Anlegen dergleichen Plz die dazugehörige Stadt im entsprechenden Feld; existiert die Plz aber noch nicht, ist das Stadt-Feld natürlich leer und ich muß den entsprechenden Namen eingeben und von jetzt an kennt mein Programm auch diese Stadt.

  2. Antwort von nach 2 Tagen hilfreich
    Re: Delphi

    du mußt eine zweite table öffnen und nach dem ort durchsuchen (ich habe das aber nicht getestet):

    tabellen: table1 -> deine tabelle
    table2 -> zweite kopie
    felder : 'plz' und 'ort' in den tabellen
    edits : dbe_PLZ und dbe_Ort in deinem
    Formular

    procedure dbe_PLZ.OnExit;
    begin
    Table2.Open;
    // suche nach PLZ
    if Table2.Locate
    ('plz', dbe_PLZ.Text, [loCaseInsensitive])
    = true then begin
    // jepp -> die plz gibt es schon
    dbe_Ort.Text
    := Table2.FieldByName('ort').AsString;
    end
    else dbe_Ort.SetFocus // nicht da
    Table2.Close;
    end;

    damit wird der ort automatisch eingetragen, wenn das plz-feld verlassen wird. ist die plz noch nicht in der datenbank, wird das eingabefeld des ortes fokussiert.

    hoffe, so klappt es..
    dirk

    • Antwort von nach 6 Tagen hilfreich
      Re^2: Delphi

      PS:
      ich habe dieses verfahren mittlerweile in einem eigenen programm im einsatz und da funzt es ausgezeichnet.

      Dirk

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!