Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringgrid Col vergleich (https://www.delphipraxis.net/111852-stringgrid-col-vergleich.html)

5etH 10. Apr 2008 13:35


Stringgrid Col vergleich
 
Hallo Zusammen,

ich habe das Problem das ich für ein warenwirtschaftsprogramm waren in ein stringgrid einlese und der Kunde beliebig waren löschen und hinzufügen kann... die Artikel Nr. ensteht sequenziel und richtet sich nach dem Colcount, nun habe ich das Problem das wenn sagen wir 3 waren eingetragen sind (1. quark 2. soße 3. kuchen) und ich den 2. lösche und ich dann wieder einen hinzufüge, dann erstellt er wieder einen mit 3. bsp: 1. quark 3. kuchen 3. neu. nun wollte ich im fixed Col woe diese sachen stehen den string in eine variable speichern und in der variablen den 2. char abfragen ob es diese zahl gibt.... soviel zur Theorie

so sieht das fragment aus
Delphi-Quellcode:
for I := 1 to fint.StringGrid1.ColCount - 1 do
zwisch := fint.StringGrid1.Cells[i,0];
if inttostr(i) <> zwisch[1] then
//speicher mit i + ' WARE '
Leider bekomme ich damit eine Zugriffsverletzung und ich kann mir nicht erklären wie ? Oder ihr kennt eine bessere methode dieses Problem anzugehen.

vielleicht könnt ihr mir weiter helfen
Vielen Dank schonmal
euer Manu

hoika 10. Apr 2008 14:14

Re: Stringgrid Col vergleich
 
Hallo,

warum so kompliziert ?
Setze die Artikelnummer einfach nach jeder Änderung neu


Delphi-Quellcode:
For iRow:= 1 to Grid.RowCount-1 do
begin
  Cells[0{Nr-Spalte},iRow]:= IntToStr(iRow);
end;
Das Bsp. geht davon aus, das es novch ne FixedRows=1 gibt.


Heiko

5etH 10. Apr 2008 14:17

Re: Stringgrid Col vergleich
 
nein darum geht es nicht das ganze in einer variablen hochzählen zu lassen ist kein problem ... die datensätze des grids werden gespeichert auf einem FTP-Server ... wenn ich das programm nun neu starte und die datensätze lade dann ist die variable leer und fängt wieder am anfang an -.- ich muss also ein vergleich auf schon bestehende datensätze machen

hoika 10. Apr 2008 14:30

Re: Stringgrid Col vergleich
 
Hallo,

dann kapier ich das Problem nicht.

nun ja:
1. Warum ColCount nicht RowCount ?
2. Fehlt beim For nicht begin/end ?
3. zwisch[1] ersetzen durch Copy(zwisch,1,1)

0. Was sagt denn der Debugger ?

Heiko

5etH 10. Apr 2008 14:36

Re: Stringgrid Col vergleich
 
also deswegen die cols weil es um den einkauf bzw verkauf geht in den rows stehen die Zeitinterwalle der einkäufe bspw. monate in den cols die waren damit man die einkaäufe in die felder eintragen kann es geht um die abrage des fixed cols nicht cols algemein

hier einmal das gesammte programmfragment
Delphi-Quellcode:
for I := 1 to fint.StringGrid1.colcount -1 do
begin
zwisch := fint.StringGrid1.Cells[i,0];
if zwisch[1] <> inttoStr(i) then // Zugriffsverletzung hier
begin

fint.StringGrid1.ColCount := fint.StringGrid1.ColCount +1;
fint.stringgrid1.Cells[fint.stringgrid1.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
fint.StringGrid2.ColCount := fint.StringGrid2.ColCount +1;
fint.stringgrid2.Cells[fint.stringgrid2.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
fint.StringGrid3.ColCount := fint.StringGrid3.ColCount +1;
fint.stringgrid3.Cells[fint.stringgrid3.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
fint.StringGrid4.ColCount := fint.StringGrid4.ColCount +1;
fint.stringgrid4.Cells[fint.stringgrid4.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
fint.StringGrid5.ColCount := fint.StringGrid5.ColCount +1;
fint.stringgrid5.Cells[fint.stringgrid5.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;

end;//end if
end; //end for

hoika 10. Apr 2008 15:41

Re: Stringgrid Col vergleich
 
Hallo,

siehe 3. meines vorigen Postings


Heiko

5etH 11. Apr 2008 07:54

Re: Stringgrid Col vergleich
 
Okay ich habe das nun eingefügt und es funktioniert auch bis zu dem Punk, bis ich mittendrin was lösche, und dann wieder was hinzufüge... hier ein Beispiel

Reinfolge bei Erstellung:

1. |1. test1|2. test2|3. test3||
2. |1. test1|3. test3||
3. |1. test1|3. test3|2.test4|3.test4||

also im 3. Punkt kann man sehen, dass er einen untötigen und doppelten Wert einträgt, der vom Anwender nicht gewollt ist.
Die Reinfolge der Punkte ist egal, nur es sollen keine doppelten entstehen ... aus einem Grund den ich nicht verstehe geht er die For-rschleife 2 mal durch, die ich im folgenden Code makiert habe.

Delphi-Quellcode:
procedure TOpt.Button1Click(Sender: TObject);
var i : Integer;
    zwisch : string;
begin
  if fint.StringGrid1.ColCount < 3 then
    begin
      fint.StringGrid1.ColCount := fint.StringGrid1.ColCount +1;
      fint.stringgrid1.Cells[fint.stringgrid1.colcount-2,0] := inttostr(fint.stringgrid1.colcount-2)+ '. ' + edit2.text;
      fint.StringGrid2.ColCount := fint.StringGrid2.ColCount +1;
      fint.stringgrid2.Cells[fint.stringgrid2.colcount-2,0] := inttostr(fint.stringgrid2.colcount-2)+ '. ' + edit2.text;
      fint.StringGrid3.ColCount := fint.StringGrid3.ColCount +1;
      fint.stringgrid3.Cells[fint.stringgrid3.colcount-2,0] := inttostr(fint.stringgrid3.colcount-2)+ '. ' + edit2.text;
      fint.StringGrid4.ColCount := fint.StringGrid4.ColCount +1;
      fint.stringgrid4.Cells[fint.stringgrid4.colcount-2,0] := inttostr(fint.stringgrid4.colcount-2)+ '. ' + edit2.text;
      fint.StringGrid5.ColCount := fint.StringGrid5.ColCount +1;
      fint.stringgrid5.Cells[fint.stringgrid5.colcount-2,0] := inttostr(fint.stringgrid5.colcount-2)+ '. ' + edit2.text;
    end
  else
begin
  for I := 1 to fint.StringGrid1.colcount -1 do //läuft 2 mal durch nachdem ein wert in der mitte gelöscht wurde wie im bsp
    begin
    zwisch := fint.StringGrid1.Cells[i,0];

  if Copy(zwisch,1,1) <> inttoStr(i) then
    begin
      fint.StringGrid1.ColCount := fint.StringGrid1.ColCount +1;
      fint.stringgrid1.Cells[fint.stringgrid1.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
      fint.StringGrid2.ColCount := fint.StringGrid2.ColCount +1;
      fint.stringgrid2.Cells[fint.stringgrid2.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
      fint.StringGrid3.ColCount := fint.StringGrid3.ColCount +1;
      fint.stringgrid3.Cells[fint.stringgrid3.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
      fint.StringGrid4.ColCount := fint.StringGrid4.ColCount +1;
      fint.stringgrid4.Cells[fint.stringgrid4.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
      fint.StringGrid5.ColCount := fint.StringGrid5.ColCount +1;
      fint.stringgrid5.Cells[fint.stringgrid5.colcount-2,0] := inttostr(i)+ '. ' + edit2.text;
    end;//end if
  end; //end for i
end;// end else

end;
Es ist ja auch jeden Fall ein logisch Fehler und es wäre nett, wenn ihr mir helfen könntet ihn zu finden.

Schonmal vielen Dank
euer Manu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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