|
Registriert seit: 8. Dez 2007 Ort: Berlin & Augsburg 29 Beiträge Delphi 2010 Enterprise |
#1
Hallo liebe Delpfianer,
bin mal wieder am rumknobeln und komme an einem Punkt einfach nicht weiter, obwohl ich das Forum schon durchstöbert und vieles davon probiert habe. Folgendes ist gegeben: Eine kleine Anwendung: Form1: ist für die Benutzeranmeldung (Benutzername & Passwort) für diese Anwendung. Form2: hier werden die Benutzer angelegt und in eine Textdatei gespeichert, geöffnet und bearbeitet. Form3: das eigentliche Hauptfenster meiner Anwendung. Ziel ist es mit Form2 Benutzer (Benutzername, Kennwort usw.) anzulegen, zu barbeiten oder zu löchen. Diese Daten werden in eine Datei gespeichert (Benutzer.dat). Das funktioniert auch alles ganz gut. Hier mal die Unit:
Delphi-Quellcode:
Nun Ziel ist es wenn die Anwendung ausgefürt und Form1 angezeigt wird, das der Benutzer seinen Benutzernamen und Passwort einträgt, anschließend diese Eingaben dann mit der zuvor in Form2. erstellten Benutzer.dat verglichenn werden und wenn sie mit einem Datensatz übereinstimmen, Form3 also das Huptfenster geöffnet wird.
var
benutzermax: Word = 1; // Arrygröße-Max. Anz. d. Benutzer type TBenutzer = record // Typ der Struckturvariable Benutzername: string[255]; Kennwort: string[255]; Kennworthinweis: string[255]; Vorname: string[255]; ZVorname: string[255]; Nachname: string[255]; Geschlaecht: boolean; Geborenam: string[255]; Geborenin: string[255]; Straße: string[255]; PLZ: string[255]; Ort: string[255]; Festnetz: string[255]; Mobil: string[255]; Email: string[255]; Internetseite: string[255]; Kontakthinweis: string[255]; end; var benutzer: array of TBenutzer; // dyn. Datenhaltung puffer: array of TBenutzer; // dto. zum zw.speichern index: Word = 0; // akt. Feldindex beginnt mit 0 f: TFileStream; // persistente Datenhaltung pfad: string; procedure TForm2.DS_Benutzer_Speichern; begin benutzer[index].Benutzername := Edit6.Text; benutzer[index].Kennwort := Edit7.Text; benutzer[index].Vorname := Edit1.Text; benutzer[index].ZVorname := Edit2.Text; benutzer[index].Nachname := Edit3.Text; benutzer[index].Geborenam := Edit4.Text; benutzer[index].Geborenin := Edit5.Text; benutzer[index].Kennworthinweis := Edit8.Text; benutzer[index].Straße := Edit12.Text; benutzer[index].PLZ := Edit9.Text; benutzer[index].Ort := Edit11.Text; benutzer[index].Festnetz := Edit10.Text; benutzer[index].Mobil := Edit13.Text; benutzer[index].Email := Edit16.Text; benutzer[index].Internetseite := Edit14.Text; benutzer[index].Kontakthinweis := Edit15.Text; end; procedure TForm2.DS_Benutzer_Anzeigen; begin Edit6.Text := benutzer[index].Benutzername; Edit7.Text := benutzer[index].Kennwort; Edit1.Text := benutzer[index].Vorname; Edit2.Text := benutzer[index].ZVorname; Edit3.Text := benutzer[index].Nachname; Edit4.Text := benutzer[index].Geborenam; Edit5.Text := benutzer[index].Geborenin; Edit8.Text := benutzer[index].Kennworthinweis; Edit12.Text := benutzer[index].Straße; Edit9.Text := benutzer[index].PLZ; Edit11.Text := benutzer[index].Ort; Edit10.Text := benutzer[index].Festnetz; Edit13.Text := benutzer[index].Mobil; Edit16.Text := benutzer[index].Email; Edit14.Text := benutzer[index].Internetseite; Edit15.Text := benutzer[index].Kontakthinweis; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); var i: Integer; begin i := Application.MessageBox('Soll die Änderungen gespeichert werden?', 'Frage', 36); if i = 6 then // Ja-Button gedrückt begin DS_Benutzer_Speichern; // aktuellen Datensatz sichern if Button8.Enabled then Button8Click(Self) else Button9Click(Self) end; benutzer := nil; puffer := nil end; procedure TForm2.FormCreate(Sender: TObject); begin SetLength(benutzer, benutzermax); // Array mit einem Feld wird angelegt DS_Benutzer_Anzeigen; pfad := ExtractFilePath(ParamStr(0)) + 'Benutzer'; // einen Standard-Dateinamen zuweisen Caption := pfad; DS_Benutzer_Anzeigen; // ersten Datensatz anzeigen Button8.Enabled := False; // Datei existiert noch nicht SaveDialog1.Options := [OFOverwritePrompt]; // Warnung vor Überschreiben SaveDialog1.FileName := pfad end; procedure TForm2.Button2Click(Sender: TObject); // DS löschen var i: Word; j: Integer; begin if benutzermax = 1 then Application.MessageBox('Der letzte Datensatz kann nicht gelöscht werden!', 'Problem', 0) else if MessageDlg('Wollen Sie den Datensatz wirkliche löschen?', mtWarning, [mbYes, mbNo], 0) = mrYes then begin SetLength(puffer, benutzermax - 1); j := -1; for i := 0 to benutzermax - 1 do if i <> index then begin Inc(j); puffer[j] := benutzer[i]; end; Dec(benutzermax); for i := 0 to benutzermax - 1 do benutzer[i] := puffer[i]; // zurück kopieren benutzer := Copy(benutzer, 0, benutzermax); // letzten DS abschneiden if index > 0 then Dec(index); DS_Benutzer_Anzeigen; end; end; . . . procedure TForm2.Button1Click(Sender: TObject); // neuer DS var i, j: Integer; begin DS_Benutzer_Speichern; SetLength(puffer, benutzermax + 1); j := -1; for i := 0 to benutzermax - 1 do begin Inc(j); puffer[j] := benutzer[i]; if i = index then Inc(j) // hier wird der neue DS eingefügt end; Inc(benutzermax); SetLength(benutzer, benutzermax); for i := 0 to benutzermax - 1 do benutzer[i] := puffer[i]; // zurück kopieren if index < benutzermax - 1 then Inc(index); DS_Benutzer_Anzeigen; end; . . . procedure TForm2.Button7Click(Sender: TObject); // öffnen var i: Word; begin if OpenDialog1.Execute then begin pfad := OpenDialog1.FileName; try f := TFileStream.Create(pfad, fmOpenRead) except MessageBeep(0); Application.MessageBox('Die Datei konnte nicht geöffnet werden!', 'Fehler', 52); Exit end; f.ReadBuffer(benutzermax, SizeOf(Word)); SetLength(benutzer, benutzermax); for i := benutzermax - 1 downto 0 do f.ReadBuffer(benutzer[i], SizeOf(TBenutzer)); // alle Datensätze einlesen index := 0; DS_Benutzer_Anzeigen; // ersten Datensatz anzeigen Form3.Caption := pfad; // Anzeige Dateipfad in Titelleiste des Formulars Button8.Enabled := True; // freigeben zum Speichern f.Free end end; procedure TForm2.Button8Click(Sender: TObject); // speichern var i: Integer; begin try f := TFileStream.Create(pfad, fmOpenWrite) except ShowMessage (' Fehler beim Speichern von ' + pfad); Exit end; f.WriteBuffer(benutzermax, SizeOf(Word)); for i := benutzermax - 1 downto 0 do f.WriteBuffer(benutzer[i], SizeOf(TBenutzer)); f.Free end; procedure TForm2.Button9Click(Sender: TObject); // speichern unter begin if SaveDialog1.Execute then begin pfad := SaveDialog1.FileName; try f := TFileStream.Create(pfad, fmCreate) except ShowMessage ('Fehler beim Erzeugen der neuen Datei!'); Exit end; f.Free; Button8Click(Self); // zum Menüpunkt: Datei speichern Caption := pfad; Button8.Enabled := True end end; Dazu habe ich, außer die Proceduren Speichern, Speichern unter, Neuer Datensatz, Datensatz löschen sowie die FormClose-Procedur, die oben stehenden Unit weitesgehend auch in Form1 übernommen und durch folgende Proceduren erweitert:
Delphi-Quellcode:
Nun mein Problem ist das das so leider nicht funktioniert. Wenn ich die Eingabe leer lasse dan n öffnet sich Form3 obwohl das ja vermieden werden soll aber das ist nicht das eigendliche Problem. Wo es bei mir aussetzt ist das wenn ich die richtigen daten eingebe, er mir sagt der Datensatz wurde nicht gefunden. Wenn ich aber die gleiche Suchprocedure im Form2 benutzer klappt alles Problemlos wie es soll.
procedure TForm12.Button1Click(Sender: TObject); //Suchen
var i: Word; begin for i := 0 to benutzermax-1 do if UpperCase(benutzer[i].benutzername) = UpperCase(Form1.Edit1.Text) then if UpperCase(benutzer[i].kennwort) = UpperCase(Form1.Edit21.Text) then begin index := i; Form3.Show; Exit end; ShowMessage('Datensatz nicht gefunden!'); end; Sieht Ihr meine Fehler oder Gedankenfehler??? Ich hab jetzt die Syntax so oft gelesen das ich nicht mehr weiß wo oben oder unten ist. Über eure Hilfe wäre ich sehr Dankbar Liebe Grüße Dennis
Dennis Wolfram
|
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |