Delphi

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?

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:stuck_out_tongue:rocedure 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;

…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
[email protected]

…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 :smile:

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

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.

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]

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

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

Dirk