![]() |
Fehler beim Abspeichern und Laden
Liste der Anhänge anzeigen (Anzahl: 1)
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:
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 :-(
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. |
Re: Fehler beim Abspeichern und Laden
Delphi-Quellcode:
beim Speichern ist das schonmal falsch
while u<=length(inventar) do
so Richtig:
Delphi-Quellcode:
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 .... |
Re: Fehler beim Abspeichern und Laden
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! |
Re: Fehler beim Abspeichern und Laden
Weil das erste Element den index 0 hat und das letzte dann Länge-1
|
Re: Fehler beim Abspeichern und Laden
Zitat:
Delphi-Quellcode:
oder
for i:=0 to length(filter) - 1 do
Delphi-Quellcode:
heißen.
for i:=Low(filter) to High(filter) do
|
Re: Fehler beim Abspeichern und Laden
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 |
Re: Fehler beim Abspeichern und Laden
ja, stimmt......wie konnte ich vergessen...........
sorry, fehler meinerseids.... mal probieren ob es klappt, wen ich des umändere! ich sag dann bescheid! |
Re: Fehler beim Abspeichern und Laden
ich bekomme immernoch folgende Fehlermeldung:
Zitat:
|
Re: Fehler beim Abspeichern und Laden
An welcher Stelle denn?
|
Re: Fehler beim Abspeichern und Laden
Hallo Mr Hyde,
Delphi-Quellcode:
ist das nicht:
for i:=0 to SG_Inv.RowCount do
Delphi-Quellcode:
for i:=0 to SG_Inv.RowCount-1 do
Delphi-Quellcode:
besser:
if (SD_Save.Execute=true) then
Delphi-Quellcode:
if SD_Save.Execute then
Delphi-Quellcode:
besser:
if (OD_Oeffnen.Execute=true) then
Delphi-Quellcode:
if OD_Oeffnen.Execute then
Delphi-Quellcode:
besser:
while eof(datei)=false do
Delphi-Quellcode:
Bis bald Chemiker
while not eof(datei) do
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 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-2025 by Thomas Breitkreuz