AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken In Datenbank(Edit1.Txt) suchen
Thema durchsuchen
Ansicht
Themen-Optionen

In Datenbank(Edit1.Txt) suchen

Offene Frage von "xv300"
Ein Thema von xv300 · begonnen am 13. Jun 2009 · letzter Beitrag vom 17. Jun 2009
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
xv300

Registriert seit: 13. Jun 2009
25 Beiträge
 
#1

In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 16:16
Datenbank: Selbsterstelle? • Version: WIN32 • Zugriff über: Per Befehl
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
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 16:18
Hi,

wie speicherst Du die Daten in der Datei ab?

Rein als Text, typisierte Datei, ...?
  Mit Zitat antworten Zitat
xv300

Registriert seit: 13. Jun 2009
25 Beiträge
 
#3

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 16:32
Delphi-Quellcode:
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;
end.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 16:36
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:
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;
Läuft bestimmt nicht, aber zeigt, worauf ich hinauswill

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
  Mit Zitat antworten Zitat
xv300

Registriert seit: 13. Jun 2009
25 Beiträge
 
#5

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 16:39
MMh, das verstehe ich jetzt leider überhaupt nicht

Gehts vielleicht einfacher und "erklärt"?


LG
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 16:45
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 ...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 17:06
Oder ein "richtiges" Datenbanksystem einsetzen
Markus Kinzler
  Mit Zitat antworten Zitat
Real-TTX

Registriert seit: 7. Mai 2008
Ort: Stuttgart / Wertheim
136 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 17:26
Zitat von mkinzler:
Oder ein "richtiges" Datenbanksystem einsetzen
Ich finde zum Bleistift ADO mit Access Datenbanken ziehmlich einfach zu bedienen. Und sollte eigentlich für jedermann schnell einsetzbar sein. Das einzige, vielleicht nicht ganz so einfache sind die SQL Statements. Aber dafür findet man schnell Beispiele. Und wenn man schonmal mit Access gearbeitet hat. Sind dei SQL Befehle schnell zu verstehen.

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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 17:33
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: In Datenbank(Edit1.Txt) suchen

  Alt 13. Jun 2009, 17:34
Zitat:
Ich finde zum Bleistift ADO mit Access Datenbanken ziehmlich einfach zu bedienen.
An Access hatte ich dabei eigentlich nicht gedacht. Eher SqLite oder ne andere embedded DB ( z.B. FireBird embedded)
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz