AGB  ·  Datenschutz  ·  Impressum  







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

StringGrid Zeile per Mausclick auslesen

Ein Thema von klausmaus · begonnen am 27. Sep 2008 · letzter Beitrag vom 10. Okt 2008
 
klausmaus

Registriert seit: 18. Sep 2008
17 Beiträge
 
#30

Re: StringGrid Zeile per Mausclick auslesen

  Alt 9. Okt 2008, 23:37
Guten Morgen Ralph,

die Neugier hat mich nicht losgelassen. Du hattest recht, mit ein paar kleinen Änderungen läuft deine Prozedur prima durch. Habe noch ein kleines Problem, für das ich nach 3 Stunden probieren noch keine Lösung habe:
Beim Refill wird der dem gelöschten Datensatz nachfolgende Datensatz doppelt im StringGrid ausgegeben. In der Rebuild-Datei (und auch in 'Hilf') ist alles i.O.
Beim Schließen der Datei lasse ich das StringGrid entsprechend der Anzahl der Einträge leeren. Wg. dem doppelten Datensatz bleibt dann aber der letzte im StringGrid stehen und ist dann beim erneuten öffnen der Datei natürlich immer noch da.

Wäre super, wenn du mir noch ein letztes Mal helfen könntest. Irgendwie bin ich blind und finde den Fehler nicht. Meines Erachtens sollte er ja in der Refill-Prozedur stecken.

Nachfolgend der aktuelle Quelltext deiner Löschprozedur. Die kommentierten Zeilen habe ich geändert.
Delphi-Quellcode:
procedure TForm1.DatenLoeschenClick(Sender: TObject);
  var DelPos : Integer;
      ChemDatH : TChemDat; //nicht mehr global

  function NamePos(Name:String):Integer;
  begin
    Result:=-1;

    //assignfile(ChemDat,Dateiname+'.dat'); //Fehlermeldung - nach auskommentieren i.O.
    reset(ChemDat);

    while not Eof(ChemDat) do begin
      read(ChemDat,Chem);
      if Chem.Name=Name then begin
        Result:=FilePos(ChemDat)-1; //Filepos -1 (löscht sonst nachfolgenden Satz)
        Break
        end
      end;
    closefile(ChemDat)
  end;

  procedure DeleteRecord(DelIdx:Integer);
  var RecIdx : Integer;
  begin
    //assignfile(ChemDat,Dateiname+'.dat'); //Fehlermeldung - nach auskommentieren i.O.
    reset(ChemDat);

   assignfile(ChemDatH,'Hilf');
    rewrite(ChemDatH);

    RecIdx:=-1;
    while not Eof(ChemDat) do begin
      read(ChemDat,Chem);
      inc(RecIdx);
      if RecIdx<>DelIdx then
      begin
      write(ChemDatH,Chem)
      end;
     end;
    closefile(ChemDat);
    closefile(ChemDatH);
  end;

  procedure RebuildDataFile;
  begin
    assignfile(ChemDat,Dateiname); //+'.dat' entfernt , da er sonst lauter dat anhängt
    rewrite(ChemDat);

    assignfile(ChemDatH,'Hilf');
    reset(ChemDatH);

    while not(eof(ChemDatH)) do begin
      read(ChemDatH,Chem);
      write(ChemDat,Chem);
      end;

    closefile(ChemDat);
    closefile(ChemDatH);

   // erase(ChemdatH) nur auskommentiert, um Inhalt zu checken
  end;

  procedure RefillGrid;
  var i : Integer;
  begin
    assignfile(ChemDat,Dateiname);
    reset(ChemDat);

    for i:=1 to FileSize(ChemDat) do begin
      read(ChemDat,Chem);
      with StringGrid1 do
        with Chem do begin
          Cells[1,i]:=IntToStr(BNum);
          Cells[2,i]:=Name;
          Cells[3,i]:=IntToStr(Bestand);
          Cells[4,i]:=Datum
          end
      end;
    closefile(ChemDat);
  end;

begin
  DelPos:=NamePos(EditName.Text);
  if DelPos>=0 then begin
    DeleteRecord(DelPos);
    RebuildDataFile;
    RefillGrid
    end ;

      EditNr.Clear;
      EditName.Clear;
      EditZugang.Text:=IntToStr(0);
      EditAbgang.Text:=IntToStr(0);
      DateTimePicker1.Date:=Date();
  end;
Übrigens habe ich deine Prozedur zum Anlass genommen, das Programm zu überarbeiten. Mittlerweile ist mir klar, warum das Proggi, je länger es wurde, umso mehr Fehlermeldungen produzierte. Habe rigoros reset und closeFile benutzt. Und schon verringerte sich die Fehlerzahl.

Beste Grüße
Michael

PS: hatte beim nochmaligen durchlesen gerade `ne Idee fürs RefillGrid: vorher alles leeren(habe RowCount festgelegt). Dann sollte es doch leer sein. Probiere es aber erst heute nachmittag aus.
  Mit Zitat antworten Zitat
 


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