AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Mein Kontaktmanager und ich brauchen Hilfe!!!

Mein Kontaktmanager und ich brauchen Hilfe!!!

Ein Thema von Neutron · begonnen am 8. Apr 2006 · letzter Beitrag vom 8. Apr 2006
Antwort Antwort
Neutron

Registriert seit: 14. Mär 2006
47 Beiträge
 
Delphi 2006 Professional
 
#1

Mein Kontaktmanager und ich brauchen Hilfe!!!

  Alt 8. Apr 2006, 09:45
Dank euren Tipps hab ich das Grundgerüst des Kontakmanagers fertig gekriegt! Danke!

Problem: Ich hab sehr viele Variationen ausprobiert (vielleicht zu viele)
und jetzt tauchen überall Fehler auf. Wahrscheinlich hab ich irgendwo mal
vergessen eine alte procedure zu löschen. Ich selbst scheine meine Fehler
nicht zu erkennen oder ich überlese sie einfach!

Ihr könnt euch den Kontaktmanager ja mal Downloaden und den Quellcode überfliegen (Ich hab sehr viel mit Kommentaren gearbeitet).

Wenn euch irgendwas seltsam erscheint oder ihr meint das gehört da nicht hin oder ihr sonst irgend ein Fehler seht
dann Meldet euch bitte noch mal!

Danke im voraus!

(Der Download wurde entfernt)
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Mein Kontaktmanager und ich brauchen Hilfe!!!

  Alt 8. Apr 2006, 10:09
Morgen,

Was für Fehler meinst du denn? An welcher Stelle?

Delphi-Quellcode:
if Form2.ListBox1.Items.Strings[11] = 'Jthen
begin
CheckBox1.Checked := True;
end
else
if Form2.ListBox1.Items.Strings[11] = 'Nthen
begin
CheckBox1.Checked := False;
end;
sowas kann man auch abkürzen:

Checkbox1.Checked := Form2.ListBox1.Items.Strings[11] = 'J'; Was machst du wenn strings keine 11 Elemente hat?
Warum haben sämtliche Controls keine vernünftige Namen?
Wie stellst du sicher, dass der Ordner "Speicher" existiert, bzw. dass du darin schreiben kannst?

Warum deklarierst du deine Variablen nicht alle an einer Stelle?

Delphi-Quellcode:
  public
    ID : Integer;
    M : Integer; // hier
    procedure LoadDaten;
    ...
  end;

var
  Form1: TForm1;
  Count : Integer= 0; // hier
Warum hast du dir keine Klasse dafür geschrieben? Das wäre wesentlich übersichtlicher und leichter zu pflegen.
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Mein Kontaktmanager und ich brauchen Hilfe!!!

  Alt 8. Apr 2006, 10:19
das mit den kalssen sit wohl das größte manko - in deinem code hat man 0 üebrsicht sry

gib mal vernünftige namen, prüf die zulässigen bereiche, step dein programm mal durch(haltepunkt, f7)

grüße Nico
Nico Müller
  Mit Zitat antworten Zitat
Neutron

Registriert seit: 14. Mär 2006
47 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Mein Kontaktmanager und ich brauchen Hilfe!!!

  Alt 8. Apr 2006, 10:34
Also das sind jetzt sehr viele Sachen auf einmal aber ich versuche alle zu beantworten!

Ich glaube die Var 'Count' benutze ich gar nicht mehr!
Danke schon mal fürs aufmerksam machen.

Zu den vernümpftigen Namen also ich dachte erst das ich das Project gar nicht allein hinbekomme
tja hat doch funktioniert...
Aber jetzt steck ich schon zu tief drin als das ich noch
alles umbenennen kann!

Ich hatte schon eine Klasse (TDatein) Angelegt aber das hat alles nicht
hingehauen (schlimmer als jetzt) und daher hab ich sie dann wieder gelöscht!

Wie gesagt ich hab viel herum probiert!

Bei dem Ortner Speicher gehe ich einfach davon aus das er Existiert bzw. das man darin schreiben kann.

Danke! Ist dir sonst noch etwas ins Auge gestochen z.B. :
Warum er wenn er beendet immer die Procedure (LoadfromStream) als Fehler markiert,
aber da die Procedure am ende ja eigentlich nicht aufgerufen
wird ist das doch völlig unmöglich oder?
  Mit Zitat antworten Zitat
Neutron

Registriert seit: 14. Mär 2006
47 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Mein Kontaktmanager und ich brauchen Hilfe!!!

  Alt 8. Apr 2006, 10:44
Gut also ich schau alles noch mal durch!
(Ich nehme jetzt den Download raus weil, ne)...
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#6

Re: Mein Kontaktmanager und ich brauchen Hilfe!!!

  Alt 8. Apr 2006, 12:41
Noch ein paar Tipps:

Statt alle Daten in Edit's oder einer Listbox temporär zu speichern, kannst du dir doch einfach eine Variable deines Typs TDatensatz erstellen.

Delphi-Quellcode:
var
   AktDatensatz: TDatensatz;
In diese Variable lädst du nun die Daten aus der Datei und in einer getrennten Prozedur (bspw. ShowValues oder ZeigeWerte) zeigst du die Kontakt-Daten in den Edits usw. an.

Außerdem wäre es sinnvoll Gebrauch vom Typ Boolean bei "Interesse Audio" usw. zu machen, statt einen String in der Form von "J" und "N" zu speichern. Zum einen braucht das mehr Speicher, ist nicht zweckmäßig und außerdem kann es zu Fehlern kommen, wenn du bspw. irgendwo im Code ein kleines "n" verwendest.

Delphi-Quellcode:
type
  TDatensatz = record //TDatensatz der immer als Stream gespeichert wird
    Vorname: AnsiString;
    Name: AnsiString;
    Alter: String;
    Geburtsdatum: String;
    Telefon: String;
    Handy: String;
    EMail: AnsiString;
    PLZ: String;
    Ort: AnsiString;
    Strasse: AnsiString;
    Hausnummer: String;
    IntersVI,
    InteresFO,
    InteresAU: Boolean; // hier
  end;
Desweiteren könntest du einfach via "Array of TDatensatz" ein dynamisches Array erstellen. Somit kannst du in einer Datei mehrere Kontakte abspeichern.

Delphi-Quellcode:
var
  fAktDatenbank: Array of TDatensatz; // Durch das hier musst du natürlich deine Laden/Speichern Funktionen abändern.
  fAktDatenbankSatz: Integer; // zum feststellen, welchen Datensatz der Benutzer gerade ansieht/bearbeitet
  fAktDatensatzDatei: String;
Mal ein kurzes Beispiel (habs hier reingetippt, kann also Fehler enthalten, aber ich denke du weißt was ich meine):

Delphi-Quellcode:
function LoadDatensatzDatei(const Value: String): Boolean;
var
  Stream: TStream;
  I: Integer;
  Len: LongInt;
begin
  Result := FileExists(Value); // Prüfen ob Dateiname existiert

  if not Result then // Falls nicht raus hier
    Exit;

  SetLength(fAktDatenbank, 0); // Nicht unbedingt notwendig: Array Länge auf 0 setzen
  Stream := TFileStream.Create(Value, fmOpenRead); // Datei/Stream öffnen

  try
    Stream.Read(Len, SizeOf(Len)); // Menge der Datensätze lesen
    SetLength(fAktDatenbank, Len); // Array Länge festlegen

    for I := 0 to Len - 1 do // Jeden Eintrag lesen
    with fAktDatenbank[I] do
      begin

        // ID
        Stream.Read(ID, SizeOf(Integer));
 
        // IntersVI
        Stream.Read(IntersVI, SizeOf(Boolean));
 
        // Name
        Stream.Read(Len, SizeOf(Len));
        SetLength(Name, Len);
        Stream.Read(PChar(Name)^, Len);
 
        // ImageIndex
        Stream.Read(ImageIndex, SizeOf(Integer));
      end;
 
  finally
    Stream.Free;
  end;

  fAktDatensatzDatei := Value; // Dateiname aktualisieren und merken
end;

procedure SaveDatensatzDatei(Value: String);
var
  Stream: TStream;
  I: Integer;
  Len: LongInt;
begin

  Stream := TFileStream.Create(Value, fmCreate); // Datei erstellen (ggf. vorher prüfen ob schon da usw.)

  try
    Len := Length(fAktDatenbank); // Menge der Datenbank-Datensätze ermitteln
    Stream.Write(Len, SizeOf(Len)); // Menge schreiben

    for I := 0 to Length(fAktDatenbank) - 1 do
    with fAktDatenbank[I] do
      begin

        // ID
        Stream.Write(ID, SizeOf(Integer));

        // IntersVI
        Stream.Write(IntersVI, SizeOf(Boolean)); // Wert von IntersVI schreiben

        // Name
        Len := Length(Name); // Länge des Strings ermitteln
        Stream.Write(Len, SizeOf(Len)); // Länge schreiben
        Stream.Write(PChar(Name)^, Len); // String schreiben

        // ImageIndex
        Stream.Write(ImageIndex, SizeOf(Integer));
 
      end;
    fAktDatensatzDatei := Value; // Name der Datei merken
  finally
    Stream.Free;
  end;

end;
Außerdem ist es manchmal sehr übersichtlich mit dem Befehl with ... do zu arbeiten:

statt:
Delphi-Quellcode:
//Jetzt wird alles in einer Listbox gespeichert
Form2.ListBox1.Clear; //Listbox leeren um Platz zu schaffen
Form2.ListBox1.Items.Add(Daten.Vorname); //Hier beginnt die Addung der Daten in die Listbox
Form2.ListBox1.Items.Add(Daten.Name);
Form2.ListBox1.Items.Add(Daten.Alter);
Form2.ListBox1.Items.Add(Daten.Geburtsdatum);
Form2.ListBox1.Items.Add(Daten.Telefon);
Form2.ListBox1.Items.Add(Daten.Handy);
Form2.ListBox1.Items.Add(Daten.EMail);
Form2.ListBox1.Items.Add(Daten.PLZ);
Form2.ListBox1.Items.Add(Daten.Ort);
Form2.ListBox1.Items.Add(Daten.Strasse);
Form2.ListBox1.Items.Add(Daten.Hausnummer);
Form2.ListBox1.Items.Add(Daten.IntersVI);
Form2.ListBox1.Items.Add(Daten.InteresFO);
Form2.ListBox1.Items.Add(Daten.InteresAU);//Hier endet sie
so:
Delphi-Quellcode:
  //Jetzt wird alles in einer Listbox gespeichert
  with Form2.ListBox1 do
    begin
      Clear; //Listbox leeren um Platz zu schaffen

      Items.BeginUpdate; // beschleunigt das hinzufügen

      Items.Add(Daten.Vorname); // Hier beginnt die Addung der Daten in die Listbox
      Items.Add(Daten.Name);
      Items.Add(Daten.Alter);
      Items.Add(Daten.Geburtsdatum);
      Items.Add(Daten.Telefon);
      Items.Add(Daten.Handy);
      Items.Add(Daten.EMail);
      Items.Add(Daten.PLZ);
      Items.Add(Daten.Ort);
      Items.Add(Daten.Strasse);
      Items.Add(Daten.Hausnummer);
      Items.Add(Daten.IntersVI);
      Items.Add(Daten.InteresFO);
      Items.Add(Daten.InteresAU); // Hier endet sie

      Items.EndUpdate; // mitteilen, dass wir fertig sind
    end;
Du solltest dir auch angewöhnen, deinen Code korrekt einzurücken. Dadurch ist er wesentlich besser lesbar.

Und zu guter letzt: du solltest deine Prozeduren/Funktionen nicht unbedingt LoadFromStream/SaveToStream nennen, da es bereits Standardnamen sind. Dabei könnte es bei einem nicht exakten Aufruf (LoadFromStream statt Listbox1.LoadFromStream) zu Fehlern kommen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:24 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