![]() |
Datenbank: Selbsterstelle? • Version: WIN32 • Zugriff über: Per Befehl
In Datenbank(Edit1.Txt) suchen
Hallo Ihr!
Ich stehe vor einem PRoblem: Wir habe ein Datenverwaltunsprogramm gebastelt, bei dem man Namen, strasse etc. eingeben kann, was dann in einer Datei.txt gespeichert wird. Dies kann man wieder aufrufen und bearbeiten. Zusätzlich wird das ganze noch als StringGrid auf einer Form2 ausgegeben. Ich soll mich nun darum kümmern, wie ich SUCHE. Das heißt, wenn ich einen Namen in eins dieser Edit Felder eingebe, dann soll mir alles von dieser Person angezeigt werden: Bsp: Mustermann Max Strasse 1 12345 Musterhausen 98760/5432 Das ist ein Datensatz!!! Und dieser wird in Editfeldern erstellt und auch ausgegeben! Wenn ich nun einen Teil davon eingebe in ein leeres Feld und auf den Button'Suche' klicke, soll mir alles von ihm angezeigt werden. Das heißt, ich gebe Max ein und bekomme (egal wie, egal ob als Tabelle oder direkt im Edit, hauptsache irgendwie) den Rest angezeigt. Wenn es meherere Möglichkeiten gibt, dann muss auch eine Lösung her. Wisst ihr zufällig wie sowas funktioniert? Liebe Grüße xv300 |
Re: In Datenbank(Edit1.Txt) suchen
Hi,
wie speicherst Du die Daten in der Datei ab? Rein als Text, typisierte Datei, ...? |
Re: In Datenbank(Edit1.Txt) suchen
Delphi-Quellcode:
end.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ExtCtrls; type TForm1 = class(TForm) LaDateisatz: TLabel; EdName: TEdit; EdVorname: TEdit; EdStrasse: TEdit; EdPLZ: TEdit; EdTelefon: TEdit; EdOrt: TEdit; LaName: TLabel; LaVorname: TLabel; LaStrasse: TLabel; LaPLZORT: TLabel; Telefon: TLabel; Budateineu: TButton; Budateioeffnen: TButton; BuDatensatzhinzu: TButton; Buzurueck: TButton; Buvorwaerts: TButton; Ladatei: TLabel; BuBeenden: TButton; Label3: TLabel; BuTabelle: TButton; Button1: TButton; RGsuchen: TRadioGroup; procedure BuBeendenClick(Sender: TObject); procedure BudateineuClick(Sender: TObject); procedure BudateioeffnenClick(Sender: TObject); procedure BuzurueckClick(Sender: TObject); procedure BuvorwaertsClick(Sender: TObject); procedure BuDatensatzhinzuClick(Sender: TObject); procedure BuTabelleClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; T_Adresse=Record Name: String[20]; Vorname: String[20]; Strasse: String[30]; PLZ: String[7]; Ort: String[15]; Telefon : String[20]; end; T_Datei = file of T_Adresse; var Form1 : TForm1; Adresse : T_Adresse; f : T_Datei; Dateiname : String; ClickedOK : Boolean; Satznummer : Integer; implementation uses Unit2; procedure liesadresse(Var Adresse:T_Adresse); begin with Adresse do begin Name := Form1.EdName.Text; Vorname := Form1.EdVorname.Text; Strasse := Form1.EdStrasse.Text; PLZ := Form1.EDPLZ.Text; Ort := Form1.EdOrt.Text; Telefon := Form1.EdTelefon.Text; end; end; {$R *.dfm} procedure TForm1.BuBeendenClick(Sender: TObject); begin Form1.Close; end; procedure TForm1.BudateineuClick(Sender: TObject); begin Dateiname := ''; ClickedOK:=InputQuery('Neue Datei anlegen','Name der neuen Datei(Vollständiger Pfad)',Dateiname); if clickedOk then begin Assignfile(f,Dateiname); rewrite(f); LaDatei.Caption := 'Datei ' + Dateiname + 'wurde angelegt'; end; end; procedure TForm1.BudateioeffnenClick(Sender: TObject); begin Dateiname := ''; ClickedOK := InputQuery('Vorhandene Datei öffnen','Name der zu öffnenden Datei(Vollständiger Pfad)', Dateiname); if ClickedOK then begin AssignFile(f,Dateiname); Reset(f); LaDatei.Caption := 'Datei '+ Dateiname + ' wurde geöffnet !'; end; end; procedure TForm1.BuzurueckClick(Sender: TObject); begin if Satznummer > 0 then begin Satznummer:= Satznummer - 1; LaDateisatz.Caption := 'Datensatz-Nr.: ' + IntToStr(Satznummer); Application.ProcessMessages; seek(f,Satznummer); read(f,Adresse); with Adresse do begin EdName.Text := Name; EdVorName.Text := Vorname; EdStrasse.Text := Strasse; EdPLZ.Text := PLZ; EdOrt.Text := Ort; EdTelefon.Text := Telefon; end end else Label3.Caption := 'Sie sind wieder am Anfang!'; Application.ProcessMessages; end; procedure TForm1.BuvorwaertsClick(Sender: TObject); begin if not eof(f) then begin read(f,Adresse); inc(Satznummer); LaDateisatz.Caption := 'Datensatz-Nr.: ' + IntToStr(Satznummer); Application.ProcessMessages; with Adresse do begin EdName.Text := Name; EdVorname.Text := Vorname; EdStrasse.Text := Strasse; EdPLZ.Text := PLZ; EdOrt.Text := Ort; EdTelefon.Text := Telefon; end end else Label3.Caption := 'Sie sind am Dateiende angekommen!!!'; end; procedure TForm1.BuDatensatzhinzuClick(Sender: TObject); begin liesadresse(Adresse); write(f,Adresse); end; procedure TForm1.BuTabelleClick(Sender: TObject); begin Form2 := TForm2.Create(Form1); Form2.Show; Form2.Tabelle.Cells[0,0] := ' '; Form2.Tabelle.Cells[1,0] := 'Name'; Form2.Tabelle.Cells[2,0] := 'Vorname'; Form2.Tabelle.Cells[3,0] := 'Strasse'; Form2.Tabelle.Cells[4,0] := 'PLZ'; Form2.Tabelle.Cells[5,0] := 'Ort'; Form2.Tabelle.Cells[6,0] := 'Telefon'; while not eof(f) do begin read(f,Adresse); Satznummer := Satznummer + 1; with Adresse do begin Form2.Tabelle.Cells[0,Satznummer] := IntToStr(Satznummer); Form2.Tabelle.Cells[1,Satznummer] := Name; Form2.Tabelle.Cells[2,Satznummer] := Vorname; Form2.Tabelle.Cells[3,Satznummer] := Strasse; Form2.Tabelle.Cells[4,Satznummer] := PLZ; Form2.Tabelle.Cells[5,Satznummer] := Ort; Form2.Tabelle.Cells[6,Satznummer] := Telefon; end end end; |
Re: In Datenbank(Edit1.Txt) suchen
Zuallererst: In einer Textdatei Daten zu speichern ist noch keine Datenbank ;)
Zum Problem: Du hast die Daten ja sicher an 3 Stellen: 1. In der Textdatei auf der Festplatte, 2. In der GUI im Stringgrid (hier würde sich evtl. eine Listview im Report-Style anbieten) und als 3. Im Hintergrund z.B. als Array of record oder so. (Für den Fall dass du letzteres nicht hast: Mach' es das erspart eine Menge Arbeit und Nerven) Dann gehst du folgendermaßen vor:
Delphi-Quellcode:
Läuft bestimmt nicht, aber zeigt, worauf ich hinauswill :stupid:
Suchfeld_OnChange()
begin Stringgrid.beginupdate; stringgrid.clear; for i := 0 to itemcount do begin if (pos(suchfeld.text, items[i].name) > 0) then stringgrid.additem(items[i]) end; stringgrid.endupdate; end; Oh, ich seh gerade: Code ... und zwar nicht so tollen Code ... also ich würde erstmal die ganze Datei einlesen und nur im Speicher rumwurschteln. Es sei denn, die Datenmengen werden sehr groß, dann würde ich eine (richtige) Datenbank nehmen ;) |
Re: In Datenbank(Edit1.Txt) suchen
MMh, das verstehe ich jetzt leider überhaupt nicht :D
Gehts vielleicht einfacher und "erklärt"? LG |
Re: In Datenbank(Edit1.Txt) suchen
Ok, ich probiers mal:
Anstatt immer auf die Datei zuzugreifen (was übrigens auch langsam ist) machst du folgendes: Du legst dir ein Array of T_Adresse an. Wenn du eine Datei öffnest, liest du die ganze Datei in das Array. Dann liest du die Elemente aus dem Array und schreibst sie in das Stringgrid. Falls im Stringgrid was verändert wird, musst du die Änderung in das Array übertragen. Beim Speichern entsprechend umgekehrt: Das Array in die Datei speichern. Das nennt sich dann "Trennen der Daten vom Interface" ;) Der Vorteil von dem Gedöns: Du kannst im Stringgrid eine Teilmenge der Daten anzeigen. (Also z.B. nur die Einträge, deren Namen mit Max beginnen) Und du malträtierst die Festplatte nicht so sehr ... |
Re: In Datenbank(Edit1.Txt) suchen
Oder ein "richtiges" Datenbanksystem einsetzen
|
Re: In Datenbank(Edit1.Txt) suchen
Zitat:
Leider weiß ich nicht ob ADO noch lange im support ist? Es ist ja ein MS Produkt und ADO.NET ist ja der Nachfolger, so viel ich weiß..... Sollte nicht OT werden... Gruß,Real-TTX |
Re: In Datenbank(Edit1.Txt) suchen
Insbesondere für größere Datenmengen wäre ein richtiges DBMS natürlich besser. Aber ich vermute mal ganz stark, dass das für den Threadersteller dann doch etwas zu schwierig werden könnte ;)
|
Re: In Datenbank(Edit1.Txt) suchen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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 by Thomas Breitkreuz