![]() |
Delphi-Version: 7
Datenübertragung von DB zu LV zu Grid
Hallo liebe Comunity,
ich habe ein Problem. Ich habe eine Datenbank mit einem Online Bücher Shop. Dazu eine Oberfläche, wo man Daten auslesen kann. (Bsp Kunden,Buecher Usw.) diese werden im TListView angezeigt. nun möchte ich diese wiederrum aus dem ListView rausnehmen und an ein TIB_Grid in einem Pop-Up Fenster übertragen. Habe in der Hilfe gesucht aber keinen Ansatz gefunden. Wäre nett wenn jemand eine Anregung für mich hätte. Grüße, Danil |
AW: Datenübertragung von DB zu LV zu Grid
Sry, aber *Bahnhof* :gruebel: Du liest Daten aus einer DB und stellst sie in einer ListView (vermutlich vsReport) dar, soweit richtig? Und das PopUp soll dann eine Detailanzeige des aktuellen Datensatzes der ListView sein, auch richtig?
|
AW: Datenübertragung von DB zu LV zu Grid
das PopUp soll die Daten aus dem ListView dann wieder in einem String Grid darstellen ( damit ich dort die Daten editieren kann)
Sprich das Pop UP soll sowas wie ein edit fenster sein |
AW: Datenübertragung von DB zu LV zu Grid
OK. Aber was genau ist denn nun das Problem?
|
AW: Datenübertragung von DB zu LV zu Grid
Wo sind die Daten , in welchem Format.
Lokal bei Dir in einer Datenbank, oder im Web und Du siehst sie im Browser ? |
AW: Datenübertragung von DB zu LV zu Grid
Die Übertragung aus dem ListView and das TIB_GRID
ich habe da keinen Ansatz. keine Ahnung wie ich das machen sollte. (Tut mir Leid ich programmiere noch nicht solange und lerne das erst, deshalb fehlt mir manchmal der Ansatz) In der Hilfe habe ich auch geschaut welchen Befehl ich da nutzen könnte, habe aber leider nichts gefunden. Mir ist klar, dass ich eine Funktion benötige, die die Daten übergibt, jedoch weiß ich nicht wie diese aussehen sollte. PS: es ist nicht die selbe Unit ( einmal eine Oberfläche und einmal eine UDatenedit) die hier relevant sind. PPS: meine daten sind Lokal |
AW: Datenübertragung von DB zu LV zu Grid
@Bummi Die Daten sind Lokal und die DB wurde mit IB-Expert erstellt falls du dies meintest
|
AW: Datenübertragung von DB zu LV zu Grid
Wenn Du nicht gleich ein OPF bauen willst, wieso nimmst Du keine DB-Controls? Auf dem Hauptformular ein DBGrid zur Anzeige, auf dem anderen Formular dann DBEdits und Konsorten zum Editieren des aktuellen Datensatzes. So erscheint mir das logisch und nicht zu kompliziert aufgebaut.
|
AW: Datenübertragung von DB zu LV zu Grid
Kann ich leider nicht.
Meine aufgabe ist es die Daten in einem ListView darzustellen |
AW: Datenübertragung von DB zu LV zu Grid
Die andere Möglichkeit wäre einen Stringgrid zu verwenden.
Wäre das vorteilhafter? |
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 17:59 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