AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Abspeichern und Laden

Ein Thema von Mr Hyde · begonnen am 3. Mär 2009 · letzter Beitrag vom 5. Mär 2009
Antwort Antwort
Seite 1 von 3  1 23      
Mr Hyde

Registriert seit: 15. Feb 2009
Ort: Schwalbach
12 Beiträge
 
Delphi 7 Professional
 
#1

Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:29
hi, ich habe mein programm mit eurer Hilfe jetzt soweit mal fertig......nur will er mir nichts speichern oder laden!
ich schicke mal den Code und die Dateien, vllt. könnt ihr den Fehler ja finden!

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Grids;

type
  TInventarDetails = record
     Raum:String[9];
     Typ:String[25];
     System:String[90];
     Benutzer:String[90];
     IP:String[16];
  end;

  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    SG_Inv: TStringGrid;
    GroupBox2: TGroupBox;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    CB_Raum: TComboBox;
    CB_Geraet: TComboBox;
    CB_System: TComboBox;
    CB_Benutzer: TComboBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    GroupBox5: TGroupBox;
    GroupBox6: TGroupBox;
    GroupBox7: TGroupBox;
    CB_IP: TComboBox;
    Label1: TLabel;
    Button1: TButton;
    Neu1: TMenuItem;
    Laden1: TMenuItem;
    Speichern1: TMenuItem;
    Speichernunter1: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    Hilfe1: TMenuItem;
    Version1: TMenuItem;
    OD_Oeffnen: TOpenDialog;
    SD_Save: TSaveDialog;
    Button2: TButton;
    Button3: TButton;
    procedure Beenden1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Laden1Click(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
    procedure Speichernunter1Click(Sender: TObject);
    procedure Neu1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  filter, inventar:array of TInventarDetails;
  datei:file of TInventarDetails;
  i, u: integer;
  Pfad, Raum, Typ, System, Nutzer, IP:String;
  kopiert:Boolean;

implementation

{$R *.dfm}

procedure TForm1.Beenden1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SG_Inv.Cells[0,0]:='Raum';
SG_Inv.Cells[1,0]:='Gerätetyp';
SG_Inv.Cells[2,0]:='Betriebssystem';
SG_Inv.Cells[3,0]:='Benutzer';
SG_Inv.Cells[4,0]:='IP - Adresse';
end;

procedure TForm1.Laden1Click(Sender: TObject);
begin
 if (OD_Oeffnen.Execute=true) then
    begin
    pfad:=OD_Oeffnen.InitialDir;
    i:=0;
     try
     AssignFile(datei,pfad);
     Reset(datei);
      while eof(datei)=false do
         begin
         setLength(inventar,i+1);
         Read(datei,inventar[i]);
         SG_Inv.Cells[0,i+1]:=inventar[i].Raum;
         SG_Inv.Cells[1,i+1]:=inventar[i].Typ;
         SG_Inv.Cells[2,i+1]:=inventar[i].System;
         SG_Inv.Cells[3,i+1]:=inventar[i].Benutzer;
         SG_Inv.Cells[4,i+1]:=inventar[i].IP;
         i:=i+1;
         end;
      CloseFile(datei);
     except
      ShowMessage('Die Datei konnte nicht geöffnet werden oder existiert nicht.');
     end;
    for i:=0 to length(inventar) do
       begin
       if (inventar[i].Raum>inventar[i-1].Raum) then
          begin
          CB_Raum.Items.Add(inventar[i].Raum);
          end;
       if (inventar[i].Typ>inventar[i-1].Typ) then
          begin
          CB_Raum.Items.Add(inventar[i].Typ);
          end;
       if (inventar[i].System>inventar[i-1].System) then
          begin
          CB_Raum.Items.Add(inventar[i].System);
          end;
       if (inventar[i].Benutzer>inventar[i-1].Benutzer) then
          begin
          CB_Raum.Items.Add(inventar[i].Benutzer);
          end;
       if (inventar[i].IP>inventar[i-1].IP) then
          begin
          CB_Raum.Items.Add(inventar[i].IP);
          end;
       end;
    end;
end;

procedure TForm1.Speichern1Click(Sender: TObject);
begin
for i:=0 to (SG_Inv.RowCount-1) do
   begin
         inventar[i].Raum:=SG_Inv.Cells[0,i+1];
         inventar[i].Typ:=SG_Inv.Cells[1,i+1];
         inventar[i].System:=SG_Inv.Cells[2,i+1];
         inventar[i].Benutzer:=SG_Inv.Cells[3,i+1];
         inventar[i].IP:=SG_Inv.Cells[4,i+1];
   end;
 try
  AssignFile(datei,pfad);
  ReWrite(datei);
  u:=0;
  while u<=length(inventar) do
     begin
     Write(datei,inventar[u]);
     u:=u+1;
     end;
  CLoseFile(datei);
 except
 ShowMessage('Sie haben bisher noch nicht abgespeichert. Bitte speichern Sie die Datei mit der "Speichern unter ..." Option.');
 end;
end;

procedure TForm1.Speichernunter1Click(Sender: TObject);
begin
if (SD_Save.Execute=true) then
   begin
    for i:=0 to (SG_Inv.RowCount-1) do
       begin
       inventar[i].Raum:=SG_Inv.Cells[0,i+1];
       inventar[i].Typ:=SG_Inv.Cells[1,i+1];
       inventar[i].System:=SG_Inv.Cells[2,i+1];
       inventar[i].Benutzer:=SG_Inv.Cells[3,i+1];
       inventar[i].IP:=SG_Inv.Cells[4,i+1];
       end;
   pfad:=SD_Save.InitialDir;
    try
     AssignFile(datei,pfad);
     ReWrite(datei);
     u:=0;
     while u<=length(inventar) do
        begin
        Write(datei,inventar[u]);
        u:=u+1;
        end;
     CLoseFile(datei);
    except
    ShowMessage('Die Datei konnte nicht gespeichert werden. Speicherpfad/Speichername ungültig oder nicht genügend freier Speicherplatz auf dere Festplatte verfügbar.');
    end;
   end;
end;

procedure TForm1.Neu1Click(Sender: TObject);
begin
SG_Inv.RowCount:=2;
SG_Inv.Cells[0,1]:='';
SG_Inv.Cells[1,1]:='';
SG_Inv.Cells[2,1]:='';
SG_Inv.Cells[3,1]:='';
SG_Inv.Cells[4,1]:='';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SG_Inv.RowCount:=SG_Inv.RowCount+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

if (kopiert=true) then
   begin
   SG_Inv.RowCount:=2;
   SG_Inv.Cells[0,1]:='';
   SG_Inv.Cells[1,1]:='';
   SG_Inv.Cells[2,1]:='';
   SG_Inv.Cells[3,1]:='';
   SG_Inv.Cells[4,1]:='';

   for i:=0 to length(filter) do
      begin
      if (CB_Raum.ItemIndex>-1) then
         begin
         if (CB_Raum.Text>inventar[i].Raum) then
            begin
            for u:=i+1 to length(inventar) do
               begin
               filter[u-1]:=filter[u];
               SetLength(filter,length(filter)-1);
               end;
            end;
         end;
      if (CB_Geraet.ItemIndex>-1) then
         begin
         if (CB_Geraet.Text>inventar[i].Typ) then
            begin
            for u:=i+1 to length(inventar) do
               begin
               filter[u-1]:=filter[u];
               SetLength(filter,length(filter)-1);
               end;
            end;
         end;
      if (CB_System.ItemIndex>-1) then
         begin
         if (CB_System.Text>inventar[i].System) then
            begin
            for u:=i+1 to length(inventar) do
               begin
               filter[u-1]:=filter[u];
               SetLength(filter,length(filter)-1);
               end;
            end;
         end;
      if (CB_Benutzer.ItemIndex>-1) then
         begin
         if (CB_Benutzer.Text>inventar[i].Benutzer) then
            begin
            for u:=i+1 to length(inventar) do
               begin
               filter[u-1]:=filter[u];
               SetLength(filter,length(filter)-1);
               end;
            end;
         end;
      if (CB_IP.ItemIndex>-1) then
         begin
         if (CB_IP.Text>inventar[i].IP) then
            begin
            for u:=i+1 to length(inventar) do
               begin
               filter[u-1]:=filter[u];
               SetLength(filter,length(filter)-1);
               end;
            end;
         end;
      end;
   for i:=0 to length(filter) do
      begin
      SG_Inv.RowCount:=i+2;
      SG_Inv.Cells[0,i+1]:=filter[i].Raum;
      SG_Inv.Cells[1,i+1]:=filter[i].Typ;
      SG_Inv.Cells[2,i+1]:=filter[i].System;
      SG_Inv.Cells[3,i+1]:=filter[i].Benutzer;
      SG_Inv.Cells[4,i+1]:=filter[i].IP;
      end;
   end
else
   begin
   ShowMessage('BItte erst die Daten in den Zwischenspeicher kopieren.');
   end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
for i:=0 to SG_Inv.RowCount do
   begin
   filter[i].Raum:=SG_Inv.Cells[0,i+1];
   filter[i].Typ:=SG_Inv.Cells[1,i+1];
   filter[i].System:=SG_Inv.Cells[2,i+1];
   filter[i].Benutzer:=SG_Inv.Cells[3,i+1];
   filter[i].IP:=SG_Inv.Cells[4,i+1];
   end;
kopiert:=true;
end;

end.
Entschuldigt die fehlenden kommentare, aber ich habe momentan keine ZEit und habs programm in 35minuten schnellverfahren schrieben müssen, da ich morgen ncoh arbeiten schriebe
Angehängte Dateien
Dateityp: zip netzwerke_inventarliste_624.zip (255,1 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:34
while u<=length(inventar) do beim Speichern ist das schonmal falsch

so Richtig:
while u < length(inventar) do
hast du mal gedebuggt?
- wird beim Speichern die Schleife richtig durchlaufen
- wie sieht die Datei nach'm Speichern aus?
richtige Dateigröße = Datensätze * SizeOf(TInventarDetails)
- wie sieht es beim Laden aus ... wie wird da die Schleife durchlaufen
....
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Mr Hyde

Registriert seit: 15. Feb 2009
Ort: Schwalbach
12 Beiträge
 
Delphi 7 Professional
 
#3

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:44
ist alles richtig gelaufen, hat mir dann gaaaaaaanz am schluss nen fehler angezeigt und die datei nicht angelegt!

außerdem wieso ehile u<length(inventar)????
das letzte element soll ja auch gespeichert werden!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:45
Weil das erste Element den index 0 hat und das letzte dann Länge-1
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:49
Zitat:
for i:=0 to length(filter) do
Das Gleiche in Grün, das mussfor i:=0 to length(filter) - 1 do oder
for i:=Low(filter) to High(filter) do heißen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:53
Hallo,

bei 5 Einträgen ist das array
0-4

Das Array fängt bei 0 an.
Ich würde hier eh eine for-Schleife nehmen.

F5 Breakpoint

mit F9 bis zum Breakpoint

F7 / F8 schrittweise ausführen


Heiko
Heiko
  Mit Zitat antworten Zitat
Mr Hyde

Registriert seit: 15. Feb 2009
Ort: Schwalbach
12 Beiträge
 
Delphi 7 Professional
 
#7

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 20:59
ja, stimmt......wie konnte ich vergessen...........
sorry, fehler meinerseids....
mal probieren ob es klappt, wen ich des umändere!
ich sag dann bescheid!
  Mit Zitat antworten Zitat
Mr Hyde

Registriert seit: 15. Feb 2009
Ort: Schwalbach
12 Beiträge
 
Delphi 7 Professional
 
#8

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 21:04
ich bekomme immernoch folgende Fehlermeldung:
Zitat:
Zugriffsverletzung bei Adresse 00402D65 in Modul 'Projekt1.exe'. Schreiben von Adresse 00000000.
hab jetzt gerade aucvh ncoh debugged aber keine fehler finden können
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 21:04
An welcher Stelle denn?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Fehler beim Abspeichern und Laden

  Alt 3. Mär 2009, 21:06
Hallo Mr Hyde,

for i:=0 to SG_Inv.RowCount do ist das nicht:

for i:=0 to SG_Inv.RowCount-1 do if (SD_Save.Execute=true) then besser:

if SD_Save.Execute then if (OD_Oeffnen.Execute=true) then besser:

if OD_Oeffnen.Execute then while eof(datei)=false do besser:

while not eof(datei) do Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 04:44 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