![]() |
AW: Datenübertragung von DB zu LV zu Grid
Bei bedarf könnte ich mein Programm als Quellcode posten, wenn das jemandem weiterhilft
|
AW: Datenübertragung von DB zu LV zu Grid
Wieso änderst Du nicht einfach nur die Reihenfolge in Deiner Komponenten Architektur?
Code:
Wenn du etwas editiert hast, landet es automatisch wieder in der DB und wenn Du neu abrufst, wird die LV wieder aus dem Dataset befüllt.DB>Dataset>Listview >DBGrid[>DBEdit] Ps.: Das sieht nicht so aus wie ich wollte. mist Ps2: Jetzt kann man es glaub ich erkennen. |
AW: Datenübertragung von DB zu LV zu Grid
danke erstmal,
aber wie soll der schritt aussehen: Listview--> Grid dafür habe ich halt keine idee |
AW: Datenübertragung von DB zu LV zu Grid
Nicht ListView -> Grid, sondern Dataset -> Grid, Du greifst ja auf dieselben Daten zu.
|
AW: Datenübertragung von DB zu LV zu Grid
Mein Vorschlag war nicht Listview>Grid, sondern Dataset>Listview und separat Dataset>Grid.
Ein DBGrid ist nicht dazu gedacht aus einem Listview befüllt zu werden. Ein Grid schon eher, aber wenn Du sowieso mit einer DB arbeitest ist der erste Schritt sehr naheliegend: 1. DB > Dataset 2. "danach" aus dem Dataset Listview und DBGrid befüllen 3. Editieren im DBGrid oder DBEdits, speichern (rote Box) DeddyH war schneller, aber ich hab keine Lust es zu löschen. |
AW: Datenübertragung von DB zu LV zu Grid
okay, danke :) ich probier das gleich mal aus :)
|
AW: Datenübertragung von DB zu LV zu Grid
Ich hab da mal eine kleine Demo geschrieben, wie man so etwas machen kann. Die Listview erzeuge ich dynamisch, damit auch die Einstellungen auf jeden Fall passen. Das Dataset ist nur gefaked, wichtig ist der untere Teil im FormCreate.
Delphi-Quellcode:
unit DSFake;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Contnrs, ComCtrls; type TFakeField = class private FValue: string; function GetAsString: string; public property Value: string read FValue write FValue; property AsString: string read GetAsString; end; TFakeDataset = class private FIndex: integer; FNames, FFirstnames, FDaysOfBirth: TObjectList; function GetEOF: Boolean; public constructor Create; destructor Destroy; override; procedure Open; procedure Close; procedure Next; procedure First; function FieldByName(const Fieldname: string): TFakeField; property EOF: Boolean read GetEOF; end; TfrmMain = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } FDataset: TFakeDataset; FListview: TListView; public { Public-Deklarationen } property Dataset: TFakeDataset read FDataset; end; var frmMain: TfrmMain; implementation {$R *.dfm} { TFakeDataset } procedure TFakeDataset.Close; begin //Brauch ma nich end; constructor TFakeDataset.Create; var aName, aFirstname, aBirthday: TFakeField; begin (* Wir tun mal so, als wäre das hier eine Ergebnismenge *) FNames := TObjectList.Create; FFirstNames := TObjectList.Create; FDaysOfBirth := TObjectList.Create; aName := TFakeField.Create; aFirstname := TFakeField.Create; aBirthday := TFakeField.Create; aName.Value := 'Korn'; aFirstname.Value := 'Klara'; aBirthday.Value := '12.12.1912'; FNames.Add(aName); FFirstnames.Add(aFirstname); FDaysOfBirth.Add(aBirthday); aName := TFakeField.Create; aFirstname := TFakeField.Create; aBirthday := TFakeField.Create; aName.Value := 'Cron'; aFirstname.Value := 'Maria'; aBirthday.Value := '01.12.1924'; FNames.Add(aName); FFirstnames.Add(aFirstname); FDaysOfBirth.Add(aBirthday); aName := TFakeField.Create; aFirstname := TFakeField.Create; aBirthday := TFakeField.Create; aName.Value := 'Beam'; aFirstname.Value := 'Jim'; aBirthday.Value := '12.10.1899'; FNames.Add(aName); FFirstnames.Add(aFirstname); FDaysOfBirth.Add(aBirthday); aName := TFakeField.Create; aFirstname := TFakeField.Create; aBirthday := TFakeField.Create; aName.Value := 'Fiddich'; aFirstname.Value := 'Glen'; aBirthday.Value := '02.10.1990'; FNames.Add(aName); FFirstnames.Add(aFirstname); FDaysOfBirth.Add(aBirthday); end; destructor TFakeDataset.Destroy; begin FNames.Free; FFirstNames.Free; FDaysOfBirth.Free; inherited; end; procedure TFakeDataset.First; begin FIndex := 0; end; function TFakeDataset.GetEOF: Boolean; begin Result := FIndex >= FNames.Count; end; function TFakeDataset.FieldByName(const Fieldname: string): TFakeField; begin if AnsiSameText(Fieldname, 'Name') then Result := TFakeField(FNames[FIndex]) else if AnsiSameText(Fieldname, 'FirstName') then Result := TFakeField(FFirstNames[FIndex]) else if AnsiSameText(Fieldname, 'DayOfBirth') then Result := TFakeField(FDaysOfBirth[FIndex]) else Result := nil; end; procedure TFakeDataset.Next; begin inc(FIndex); end; procedure TFakeDataset.Open; begin First; end; { TFakeField } function TFakeField.GetAsString: string; begin Result := FValue; end; (* Ende Fake, Anfang Simulation *) procedure TfrmMain.FormCreate(Sender: TObject); var Item: TListItem; Column: TListColumn; begin FListview := TListview.Create(self); FListview.Parent := self; FListview.Align := alClient; FListview.ViewStyle := vsReport; Column := FListView.Columns.Add; Column.Caption := 'Name'; Column.Width := 120; Column := FListView.Columns.Add; Column.Caption := 'Vorname'; Column.Width := 120; Column := FListView.Columns.Add; Column.Caption := 'Geburtsdatum'; Column.Width := 120; FDataset := TFakeDataset.Create; (* So sähe das in etwa auch bei einem "normalen" Dataset aus *) Dataset.Open; while not Dataset.EOF do begin Item := FListview.Items.Add; Item.Caption := Dataset.FieldByName('Name').AsString; Item.SubItems.Add(Dataset.FieldByName('Firstname').AsString); Item.SubItems.Add(Dataset.FieldByName('DayOfBirth').AsString); Dataset.Next; end; Dataset.Close; end; procedure TfrmMain.FormDestroy(Sender: TObject); begin Dataset.Free; end; end. |
AW: Datenübertragung von DB zu LV zu Grid
Vielen Dank ;) klappt alles soweit :). Danke, dass ihr mit mir die Geduld hattet
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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