StringGrid.RowCount równe ilości rekordów w tabeli

StringGrid.RowCount równe ilości rekordów w tabeli
AD
  • Rejestracja:około 14 lat
  • Ostatnio:3 miesiące
  • Postów:85
0

Mam problem z ustawieniem w StringGrid ilości wierszy odpowiadającej ilości rekordów w tabeli.
Próbowałem w ten sposób jednak zwracana ilość nie odpowiada rzeczywistości.

Kopiuj
procedure TForm2.Button3Click(Sender: TObject);
var idx:integer;
begin
MSTable1.open;
idx := 1;
MSTable1.FetchAll;
StringGrid1.RowCount:=MSTable1.FetchRows-1 ;
while not MSTable1.eof do
begin
StringGrid1.cells[1, idx] := MSTable1.Fields[0].asString;
StringGrid1.cells[2, idx] := MSTable1.FieldByName('nazwa').asString;
MSTable1.next;
idx := idx + 1;
end;
MSTable1.Close; 
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

StringGrid1.RowCount:=1; //nagłówki pewnie też pokazujesz
while not MSTable1.eof do
begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;
StringGrid1.cells[1, idx] := MSTable1.Fields[0].asString;
StringGrid1.cells[2, idx] := MSTable1.FieldByName('nazwa').asString;
MSTable1.next;
idx := idx + 1;
end;


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd
_13th_Dragon
Tak też można, ale będzie zamulać już przy jakimś 1000 rekordów.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0
Kopiuj
idx := StringGrid1.FixedRows;
MSTable1.FetchAll;
StringGrid1.RowCount:=MSTable1.FetchRows+idx;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
AD
  • Rejestracja:około 14 lat
  • Ostatnio:3 miesiące
  • Postów:85
0

Działa po małej poprawce.

Kopiuj
StringGrid1.RowCount:=MSTable1.FetchRows+idx-1;

Bez odjęcia jedynki pokazuje na końcu jeden pusty wiersz.

edytowany 2x, ostatnio: adnix
AD
  • Rejestracja:około 14 lat
  • Ostatnio:3 miesiące
  • Postów:85
0

Tylko problem pojawił się po usunięciu kilku rekordów z tabeli. Ilość wierszy w StrigGridzie odpowiada ilości wierszy przed skasowanie z tym, że reszta jest pusta.

_13th_Dragon
Oznacza to że MSTable1.FetchRows nie zwraca ci dokładnej wartości lecz przybliżoną, więc zastosuj pomysł od Misiekd.
AD
  • Rejestracja:około 14 lat
  • Ostatnio:3 miesiące
  • Postów:85
0

Rozwiązałem to w ten sposób:

Kopiuj
MSTable1.open;
idx:=0;
while not MSTable1.eof do
begin
idx := idx +1;
StringGrid1.RowCount:=idx+1;
StringGrid1.cells[1, idx] := MSTable1.Fields[0].asString;
StringGrid1.cells[2, idx] := MSTable1.FieldByName('nazwa').asString;
MSTable1.next;
end;
MSTable1.Close; 

Dodałem 1 do wiersza: StringGrid1.RowCount:=idx+1;

edytowany 1x, ostatnio: adnix
_13th_Dragon
Naprawdę nie rozumiem czym to się różni od rozwiązania podanego przez Misiekd. I czemu nagle zniknęli ci problemy z usuwaniem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.