![]() |
StringGrid Fehlermeldung
Fehlermeldung : Gitterindex außerhalb des zulässigen Bereichs.
Wenn der Button ausgeführt wird, kommt die Fehlermeldung! (StringGrid mit 7 Spalten)
Delphi-Quellcode:
function SeekRecord(Grid: TStringGrid; ColOrder: array of integer;
StrList: array of String): Boolean; var i: integer; j: integer; begin result := false; for i := 1 to Grid.RowCount - 1 do begin for j := low(ColOrder) to high(ColOrder) do begin if (Grid.Cells[ColOrder[J],I]=StrList[J]) then result := true else result := false; if result = false then break; end; if result = true then break; end; if result = false then Grid.Row := i else ShowMessage('Datensatz gefunden!'); //GridDeleteRow(Grid, i); if result = true then Grid.Row := i else ShowMessage('Datensatz nicht gefunden!'); end;
Delphi-Quellcode:
procedure TForm1.BitBtn7Click(Sender: TObject);
begin SeekRecord(StringGrid1,[2],['1508972155']); end; |
AW: StringGrid Fehlermeldung
Versuch es mal so
Delphi-Quellcode:
Deine Fehlermeldung kam übrigens dort bei der Zuweisung von i.
function SeekRecord(Grid: TStringGrid; ColOrder: TArray<Integer>; StrList: TArray<string>): Boolean;
var i, j: Integer; begin Result := False; for i := 1 to Grid.RowCount - 1 do begin for j := Low(ColOrder) to High(ColOrder) do begin Result := (Grid.Cells[ColOrder[j], i] = StrList[j]); // Das ist kürzer if Result then // niemals auf true oder false prüfen! eher so: if Result then Break; end; if Result then Break; end; if not Result then // "if Result = False" => "if not Result" ShowMessage('Datensatz nicht gefunden!') else ShowMessage('Datensatz gefunden!'); end;
Delphi-Quellcode:
if result = false then
Grid.Row := i else ShowMessage('Datensatz gefunden!'); //GridDeleteRow(Grid, i); if result = true then Grid.Row := i else ShowMessage('Datensatz nicht gefunden!'); |
AW: StringGrid Fehlermeldung
Zitat:
![]() Du darfst also das i nicht nach der Schleife verwenden. Also entweder die Schleife zu einer while-Schleife umbauen oder das i in der Schleife an geeigneter Stelle in einer Extra-Variablen merken und diese dann dem Grid.Row zuweisen. |
AW: StringGrid Fehlermeldung
ich würd hier eher eine whileschleife bauen, break ist nicht so schön
quick and dirty ungetestet i:=1; j:=Low(ColOrder); while (i< Grid.RowCount -1) and not result do begin; while (j< High(ColOrder) and not result do begin Result := (Grid.Cells[ColOrder[j], i] = StrList[j]); // Das ist kürzer inc(j); end; inc(i); end; |
AW: StringGrid Fehlermeldung
Oder so in der Art? (nur hingedaddelt, nicht getestet):
Delphi-Quellcode:
function SeekRecord(Grid: TStringGrid; ColOrder: array of integer;
StrList: array of String): Boolean; var i: integer; j: integer; begin result := false; for i := 1 to Grid.RowCount - 1 do begin Grid.Row := i; for j := low(ColOrder) to high(ColOrder) do begin result := (Grid.Cells[ColOrder[J],I] = StrList[J]); if not result then break; end; if result then break; end; ShowMessage(Format('Datensatz %sgefunden',[IfThen(Result,'','nicht ')])); //GridDeleteRow(Grid, i); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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 by Thomas Breitkreuz