Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Datenübertragung von DB zu LV zu Grid (https://www.delphipraxis.net/164823-datenuebertragung-von-db-zu-lv-zu-grid.html)

Impulz 1. Dez 2011 11:55

AW: Datenübertragung von DB zu LV zu Grid
 
Bei bedarf könnte ich mein Programm als Quellcode posten, wenn das jemandem weiterhilft

jobo 1. Dez 2011 12:03

AW: Datenübertragung von DB zu LV zu Grid
 
Wieso änderst Du nicht einfach nur die Reihenfolge in Deiner Komponenten Architektur?
Code:

DB>Dataset>Listview
          >DBGrid[>DBEdit]
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.

Ps.: Das sieht nicht so aus wie ich wollte. mist
Ps2: Jetzt kann man es glaub ich erkennen.

Impulz 1. Dez 2011 12:11

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

DeddyH 1. Dez 2011 12:34

AW: Datenübertragung von DB zu LV zu Grid
 
Nicht ListView -> Grid, sondern Dataset -> Grid, Du greifst ja auf dieselben Daten zu.

jobo 1. Dez 2011 12:40

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.

Impulz 1. Dez 2011 12:42

AW: Datenübertragung von DB zu LV zu Grid
 
okay, danke :) ich probier das gleich mal aus :)

DeddyH 1. Dez 2011 14:35

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.

Impulz 2. Dez 2011 05:22

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.
Seite 2 von 2     12   

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