Thema: Delphi StringGrid refreshen

Einzelnen Beitrag anzeigen

sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#1

StringGrid refreshen

  Alt 24. Sep 2006, 21:51
Datenbank: SQLite • Version: 3 • Zugriff über: libsql
Hallo Freunde,

nachdem ich mich nun schon ca 2 Stunden mit diesem Probelm auseinandergesetzt habe muss ich hier um Hilfe bitten.

Ich habe auch schon die Suche benutzt aber ich werde nicht schlauer da ich denke das mein ich den richtigen Weg eingeschlagen habe aber falsch umgesetzt habe.

Mein Vorhaben:
Ich habe ein Pagecontrol auf dem ich Editfelder habe einen Button und ein Stringgrid.
Ich lasse mit beim OnShow aus einer Query an die DB die Datensätze in das Stringgrid schreiben, das funktioniert alles fein.
Ich möchte nun aber auch nach dem Buttonclick beim eintragen eines neuen Datensatzes in die DB automatisch die Abfrage an die DB ausfürhen damit das Stringgrid sozusagen akktualisiert wird.


Mein Problem:
Daten werden eingetragen, aber alles wird durcheinandergewürfelt im Stringgrid, ich habe immer vor dem Letzten eintrag der am Ende des Stringgrids erfolgreichgeladen wurde den Ersten Eintrag aus der 2 nochmal stehen, komisch nicht .
Wenn ich das Programmm neu Starte werden alle Datensätze wieder richtig angezeigt und der Fehlerhafte eintrag ist weg.


Ich denke ich hab einen Fehler inn der Abfrage der Datensätze.

Vielleicht wäre einer so nett und schaut sich das mal an, ich habe an dem Ding sehr lange gesessen und die Programmierung ist sicher nicht grad das gelbe vom ein. Dafür hab ichs selber gemacht

Hier nun der Code, ich denke der Fehler liegt in der "procedure GetDataSmall;":
Delphi-Quellcode:
//TabSheet4 Datensatz eintragen
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not DB.Query ('insert into kunden (name, leistung, dokumente) values (' + QuotedStr(Edit1.Text) + ', ' + QuotedStr(Edit2.Text) +' , ' + QuotedStr(Edit3.Text) + ') ') then
    ShowMessage('DB error: '+ DB.ErrorMessage);
    //Application.ProcessMessages;
    //StringGrid1.Repaint;
    //ClearStringGrid1; //StringGrid1 Leeren
    ClearEditsTab4Add; //Felder Leeren
    Form1.StringGrid1.Refresh;
    GetDataSmall; //Daten auslesen
    
end;


//Programm Close
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //Datenbank Instanz - Memory freigben
  db.Free;
end;


//Programm OnCreate
procedure TForm1.ClearEditsTab4Add;
begin
  Form1.Edit1.Text := '';
  Form1.Edit2.Text := '';
  Form1.Edit3.Text := '';
  Form1.Edit4.Text := '';
end;


//StringGrid1 Leeren
procedure TForm1.ClearStringGrid1;
var
  irow,icol : Integer;
begin
  with StringGrid1 do
    for irow := 0 to RowCount -1 do
      for icol := 0 to ColCount -1 do
       Cells[irow,icol] := '';
end;


//Programm OnCreate
procedure TForm1.FormCreate(Sender: TObject);
begin
  //Datenbankverbindung erstellen
  db := TLiteDB.Create(Self);
  db.Use('database.s3db');
end;

//TabSheet4 - Daten auslesen und in Stringgrid schreiben
procedure TForm1.GetDataSmall;
var
  max: integer;
  i:integer;
  Zeile: integer;
begin
  //Querry an die DB
  db.Query ('select * from kunden');
  //Anzahl der Datensätze zählen
  max := db.RowCount;

  //Ausgabe der Datensätze im Stringgrid
  for I := 0 to max - 1 do
  begin
    Zeile:= StringGrid1.RowCount-1;
    if zeile < max -1 then
    StringGrid1.RowCount := StringGrid1.RowCount + 1;

    StringGrid1.Cells[0, Zeile] := db.Results[i][0];
    StringGrid1.Cells[1, Zeile] := db.Results[i][1];
    StringGrid1.Cells[2, Zeile] := db.Results[i][2];
  end;

end;

//TabSheet4 OnShow
procedure TForm1.TabSheet4Show(Sender: TObject);
begin
  ClearEditsTab4Add; //Felder Leeren
  GetDataSmall; //Datensätze abrufen
end;
  Mit Zitat antworten Zitat