Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 

Re: Datansatz alle Felder kopieren

  Alt 3. Nov 2005, 06:31
Hallo needatip.

Technisch gesehen ist es kein Problem bestimmte Felder eines Datensatzes mit den Feldwerten eines anderen Datensatzes der gleichen Tabelle zu initialiseren. Du hast nach SQL gefragt:

SQL-Code:
UPDATE tbl SET
  fld = (SELECT fld FROM tbl WHERE id = :src)
WHERE id = :tgt
Es ist aber nicht üblich Felder auf diese Art prophylaktisch zu initialisieren. Da du keine allgemeinen Standardwerte definieren, sondern die Feldwerte eines beliebigen Datensatzes zur Vorbelegung verwenden möchtest, empfehle ich dir den folgenden Ansatz.

Du führst eine Name-Value-Liste in deiner Form mit, in der die Vorbelegungswerte für einen neuen Satz zwischengespeichert werden. Wenn der Benutzer einen Datensatz markiert hat und der DataSet in den Insert-Modus schaltet, dann werden die gewünschten Feldwerte des aktuellen Datensatzes zwischengespeichert. Im Ereignis OnNewRecord() des DataSet werden dann diese Werte übernommen.

Delphi-Quellcode:
unit DemoFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, ADODB, Grids, DBGrids;

type
  TDemoForm = class(TForm)
    DBGrid: TDBGrid;
    ADOConnection: TADOConnection;
    DataSource: TDataSource;
    ADOTable: TADOTable;
    DBNavigator: TDBNavigator;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ADOTableBeforeInsert(DataSet: TDataSet);
    procedure ADOTableNewRecord(DataSet: TDataSet);
  private
    Defaults: TStrings;
    procedure SaveDefaults(Dataset: TDataSet);
    procedure LoadDefaults(Dataset: TDataSet);
  public
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

const
  FN_NAME = 'NACHNAME';

procedure TDemoForm.SaveDefaults(Dataset: TDataSet);

begin
  Defaults.Values[FN_NAME] := DataSet.FieldValues[FN_NAME];
end;

procedure TDemoForm.LoadDefaults(Dataset: TDataSet);
begin
  DataSet.FieldValues[FN_NAME] := Defaults.Values[FN_NAME];
end;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  Defaults := TStringList.Create;
end;

procedure TDemoForm.FormDestroy(Sender: TObject);
begin
  Defaults.Free;
end;

procedure TDemoForm.ADOTableBeforeInsert(DataSet: TDataSet);
begin
  SaveDefaults(DataSet);
end;

procedure TDemoForm.ADOTableNewRecord(DataSet: TDataSet);
begin
  LoadDefaults(DataSet);
end;

end.
Grüße vom marabu
  Mit Zitat antworten Zitat