AGB  ·  Datenschutz  ·  Impressum  







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

StringGrid Fehlermeldung

Ein Thema von lucy · begonnen am 26. Okt 2017 · letzter Beitrag vom 26. Okt 2017
Antwort Antwort
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#1

StringGrid Fehlermeldung

  Alt 26. Okt 2017, 00:17
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;
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#2

AW: StringGrid Fehlermeldung

  Alt 26. Okt 2017, 01:12
Versuch es mal so

Delphi-Quellcode:
 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;
Deine Fehlermeldung kam übrigens dort bei der Zuweisung von i.
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!');

Geändert von Glados (26. Okt 2017 um 01:31 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#3

AW: StringGrid Fehlermeldung

  Alt 26. Okt 2017, 08:19
Fehlermeldung : Gitterindex außerhalb des zulässigen Bereichs.

Delphi-Quellcode:
 if result = true then
  Grid.Row := i
 else
  ShowMessage('Datensatz nicht gefunden!');
end;
Laut Spezifikation ist die Schleifenvariable nach Beendigung der Schleife undefiniert:
http://docwiki.embarcadero.com/RADSt...t_sein_(Delphi)

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.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: StringGrid Fehlermeldung

  Alt 26. Okt 2017, 08:28
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;
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: StringGrid Fehlermeldung

  Alt 26. Okt 2017, 11:25
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;
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:29 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