![]() |
Delphi-Version: 7
StringGrid-Problem
Guten Tag,
Erstmal zu meinem Projekt: Ich habe eine Datenbank mit Kunden,Autoren,Büchern usw. (IBExpert) und habe eine Datenbankoberfläche die ich in Delphi 7 schreibe. Die Datenbank wird abgerufen und die Daten werden in einem ListView angezeigt. Auf diesem ListView kann man per Rechtsklick Bearbeiten und Löschen der einzelnden Datensätze ausführen, dabei öffnet sich ein Pop-Up Fenster mit einem StringGrid wo dann die ausgewählte Zeile angezeigt wird. Dort Editiere ich die Daten und reiche diese an den ListView zurück. Soweit so gut. Doch nun: Wieso werden die Daten UNTER die alten daten geschrieben???? (BSP: ID Vorname Nachname 1 Max Mustermann BEARBEITEN: 1 Martin Mustermann nach dem bearbeiten------> ID Vorname Nachname 1 Max Mustermann wenn ich jetzt auf LÖSCHEN gehe.. steht da: 1 Martin Mustermann Vielen dank schonmal |
AW: StringGrid-Problem
Anscheinend machst Du etwas falsch. Mehr kann ich anhand der Fülle des geposteten Codes allerdings nicht dazu sagen.
|
AW: StringGrid-Problem
so siehts im Bearbeiten klich aus:
Code:
SO bei der Kundenerstellung:
rocedure TStartseite.Bea1click(Sender:TObject);
var Kunde :Tkunde; neuKunde:TKunde; neuItem: TListItem; Sendung :TSendung; neuSendung:TSendung; Autor :TAutor; neuAutor:TAutor; Buch :TBuch; neuBuch:TBuch; begin if (rgAuswahl.ItemIndex = 0) then begin Kunde:= TKunde(lvAuswahl.ItemFocused.SubItems.Objects[1]); Dateneditieren.giveKundeDataToGrid(Kunde); if IsPositiveResult(Dateneditieren.ShowModal()) then begin Kunde:= TKunde (Dateneditieren.StrGrAuswahl.Objects[1,2]); neuKunde:=TKunde(lvAuswahl.ItemFocused.SubItems.Objects[0]); kunde:= neuKunde.Create(neuKunde.ID,neuKunde.Vorname,neuKunde.Nachname); lvAuswahl.ItemFocused.SubItems.Add(Dateneditieren.StrGrAuswahl.Cells[1,1]); lvAuswahl.ItemFocused.SubItems.Add(Dateneditieren.StrGrAuswahl.Cells[2,1]); neuKunde:=TKunde.Create(Kunde.ID,(Dateneditieren.StrGrAuswahl.Cells[1,1]),kunde.nachname); neuKunde:=Tkunde(Dateneditieren.StrGrAuswahl.Cells[2,1]); connect.KundeTransa.StartTransaction; connect.KundeTransa.Commit; connect.KundeQuery.CommitUpdates; end else begin IsNegativeResult(Dateneditieren.ShowModal()) end; end else if (rgAuswahl.ItemIndex = 1) then begin sendung:= TSendung(lvAuswahl.ItemFocused.SubItems.Objects[0]); Dateneditieren.giveSendungDataToGrid(Sendung); if IsPositiveResult(Dateneditieren.ShowModal()) then begin Sendung:= TSendung (Dateneditieren.StrGrAuswahl.Objects[1,2]); neuSendung:=TSendung(lvAuswahl.ItemFocused.SubItems.Objects[0]); Sendung:= neuSendung.Create(neuSendung.ID,neuSendung.Status,neuSendung.Rechnung); lvAuswahl.ItemFocused.SubItems.Add(Dateneditieren.StrGrAuswahl.Cells[1,1]); lvAuswahl.ItemFocused.SubItems.Add(Dateneditieren.StrGrAuswahl.Cells[2,1]); neuSendung:=TSendung.Create(Sendung.ID,(Dateneditieren.StrGrAuswahl.Cells[1,1]),Sendung.Rechnung); neuSendung:=TSendung(Dateneditieren.StrGrAuswahl.Cells[2,1]); end else begin IsNegativeResult(Dateneditieren.ShowModal()) end;
Code:
und so beim übergeben:
function TDataconnect.getKunden():TKundeList;
begin Result:= TKundeList.create(); KundeQuery:= TIBOQuery.Create(nil); KundeQuery.SQL.Text:= 'SELECT * FROM KUNDEN '; KundeQuery.IB_Connection:= FDataBase; KundeTransa:= TIBOTRansaction.Create(nil); KundeTransa.IB_Connection:= FDataBase; KundeQuery.IB_Transaction:= KundeTransa; KundeTransa.StartTransaction(); try KundeQuery.Open(); while not KundeQuery.Eof do begin kunde:= TKunde.Create(KundeQuery.Fieldbyname('Kunden_ID').asInteger, KundeQuery.FieldbyName('Vorname').asString, KundeQuery.FieldbyName('nachname').AsString); Result.addkunde(Kunde); KundeQuery.Next(); end; KundeTransa.Commit(); except on e:Exception do begin ShowMessage(e.Message); KundeTransa.Rollback(); end; end; end;
Code:
procedure TDatenEditieren.giveKundeDataToGrid(AKUnde:TKunde);
Begin StrGrAuswahl.Cells[0,1]:= IntToStr(Akunde.Id); StrGrAuswahl.Cells[1,1]:= AKUnde.Vorname; StrGrAuswahl.Cells[2,1]:=AKunde.Nachname; end; ich weüß nicht habe ich noch relevante stellen nicht aufgelistet? wenn ja füge ich welche hinzu |
AW: StringGrid-Problem
Zitat:
|
AW: StringGrid-Problem
worauf bezieht sich "UNTER" ?
Gruß K-H Edit: gefühlt ist es mit der Trennung von Daten und Darstellung auch nicht weit her. |
AW: StringGrid-Problem
DBDaten > ListView > StringGrid > ListView
Warum nicht so? DBDaten > DBGrid <> eingebauter Editor PS: Der Titel ist nicht grade aussagekräftig, bzw. rate mal wieviele Probleme mit irgendeiner Komponente haben und wie unübersichtlich es wäre, wenn alle nur XYZKomponente-Problem schreiben? Und was hat das Problem mit dem StringGrid zu tun? Ich hab es jetzt so verstanden, daß du Probleme in der ListView hast. :gruebel: Ach ja, in Bea1click sieht es so aus, als wenn du bearbeitete Daten immer nur einfügst (Create/Add/...) und nirgendwo etwas "überschreibst". |
AW: StringGrid-Problem
Hi,
erstmal vielen Dank, habe ja schon probleme mit dem StringGrid, da es anscheinend die Daten nicht richtig weitergibt. mein aufbau ist ja gerade DB-LV-SG-LV ist doch schon so aufgebaut. der andere Gedanke meinerseits wäre sonst DB-LV-SG-DB würde sich soetwas lohnen? Mit dem Titel hast du recht...:oops: sorry |
AW: StringGrid-Problem
Versuchen wir es doch einmal so: das Form2 bekommt eine Property vom Typ TKunde spendiert. Nun könnte man das in Form1 sinngemäß so machen:
Code:
var Kunde: TKunde;
if Bearbeiten then Kunde := aktueller_Kunde_in_ListView else if Neuanlage then Kunde := TKunde.Create; Form2.Kunde := Kunde; |
AW: StringGrid-Problem
Vielen Dank Detlef,
Habe gerade eine Lösung gefunden... Ich werde einfach eine Prozedur anlegen die den Kunden so Speichert (in der Datenbank) und dann das ListView einfach aktualisiert :). aber vielen Dank für euere Hilfe :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz