Einzelnen Beitrag anzeigen

Mr Hyde

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

Re: Fehler beim Abspeichern und Laden

  Alt 5. Mär 2009, 14:30
entschuldigt die späte antwort, ich habe heute informatik-arbeit geschrieben und musste gestern noch lernen!

also, hier der nun der naktualisierte Queltext:
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];
     bsys: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, bsys, Nutzer, IP:String;
  kopiert:Boolean;
  runfirst: integer;

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';
Speichern1.Enabled := false;

end;

procedure TForm1.Laden1Click(Sender: TObject);
begin
  OD_OEFFNEN.Filter := 'Datenbanken (*.db)|*.db| Alle Datein (*.*)| *.*';
 if OD_Oeffnen.Execute then
    begin
    pfad:=OD_Oeffnen.FileName;
    i:=0;
     try
     AssignFile(datei,pfad);
     Reset(datei);
      while not eof(datei) 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].bsys;
         SG_Inv.Cells[3,i+1]:=inventar[i].Benutzer;
         SG_Inv.Cells[4,i+1]:=inventar[i].IP;
         SG_Inv.RowCount:=i+2;
         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)-1) 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].bsys>inventar[i-1].bsys) then
          begin
          CB_Raum.Items.Add(inventar[i].bsys);
          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;}

      setlength(filter, 5);
for i:=0 to 4 do
begin
filter[i].Raum := '';
filter[i].Typ :=''             ;
filter[i].bsys :=''          ;
filter[i].Benutzer :=''     ;
filter[i].IP :='';
end;
     end;
end;

procedure TForm1.Speichern1Click(Sender: TObject);
begin
for i:=1 to (SG_Inv.RowCount-1) do
   begin
         SetLength(inventar, i);
         inventar[i-1].Raum:=SG_Inv.Cells[0,i];
         inventar[i-1].Typ:=SG_Inv.Cells[1,i];
         inventar[i-1].bsys:=SG_Inv.Cells[2,i];
         inventar[i-1].Benutzer:=SG_Inv.Cells[3,i];
         inventar[i-1].IP:=SG_Inv.Cells[4,i];
   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
SD_SAVE.Filter := 'Datenbanken (*.db)|*.db| Alle Datein (*.*)| *.*';
if SD_Save.Execute then
   begin
    for i:=1 to (SG_Inv.RowCount-1) do
       begin
       SetLength(inventar, i);
       inventar[i-1].Raum:=SG_Inv.Cells[0,i];
       inventar[i-1].Typ:=SG_Inv.Cells[1,i];
       inventar[i-1].bsys:=SG_Inv.Cells[2,i];
       inventar[i-1].Benutzer:=SG_Inv.Cells[3,i];
       inventar[i-1].IP:=SG_Inv.Cells[4,i];
       end;
   pfad:=SD_Save.FileName;
    try
     AssignFile(datei,pfad);
     ReWrite(datei);
     u:=0;
     while u<=(length(inventar)-1) do
        begin
        Write(datei,inventar[u]);
        u:=u+1;
        end;
     CLoseFile(datei);
     Speichern1.Enabled := false;
    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)-1) do
      begin
      if (CB_Raum.ItemIndex>-1) then
         begin
         if not(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 not(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 not(CB_System.Text=inventar[i].bsys) 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 not(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 not (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].bsys;
      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-1) do
   begin
   SetLength(filter, i+1);
   filter[i].Raum:=SG_Inv.Cells[0,i+1];
   filter[i].Typ:=SG_Inv.Cells[1,i+1];
   filter[i].bsys:=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;
   runfirst := 1;

   for i:=0 to (length(filter)-1) do
        begin
        if runfirst = 1 then
                begin
                filter[i].Raum := SG_INV.Cells[0, i+1];
                filter[i].Typ := SG_INV.Cells[1, i+1];
                filter[i].bsys := SG_INV.Cells[2, i+1];
                filter[i].Benutzer := SG_INV.Cells[3, i+1];
                filter[i].IP := SG_INV.Ce´lls[4, i+1];
                runfirst:=0;
                end
                else
                
                end;



end;

end.
das laden/speichern geht jetzt, war ein fehler bei der längensetzung des arrays sowie einige SaveDialog/OpenDialog fehleingestellungen!

hab nun nur das problem, dass er mir ALLE optionen in die erste combobox, und nicht wie gewollt in die jeweils dafür vorgesehene combobox schreibt.

anbei die Dateien!(ohne exe!^^)
Angehängte Dateien
Dateityp: zip netzwerke_inventarliste_200.zip (15,4 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat