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;