AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datansatz alle Felder kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datansatz alle Felder kopieren

Ein Thema von needatip · begonnen am 2. Nov 2005 · letzter Beitrag vom 3. Nov 2005
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Datansatz alle Felder kopieren

  Alt 3. Nov 2005, 07: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
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Datansatz alle Felder kopieren

  Alt 3. Nov 2005, 11:46
Hey, genial.
Genau das hab ich gesucht.
Kannst Du mir bitte noch beschreiben wie ich die Werte mit einem ButtonClick kopiere und dann in einen beliebigen Datensatz einfüge ?


so geht das nicht, weil das Dataset nicht vorhanden ist.
Bin halt nicht so geübt im programmieren.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveDefaults(DataSet);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  LoadDefaults(DataSet);
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Datansatz alle Felder kopieren

  Alt 3. Nov 2005, 12:19
Ich arbeite in meinem Beispiel mit DataSet, weil ich dessen Ereignisse benutze. Du wirst eine Table- oder Query-Komponente haben, die du an Stelle von DataSet angeben kannst. Viel wichtiger aber ist es, dass du dir ein Konzept für die Benutzerschnittstelle überlegst. Wie legt der Benutzer die beteiligten Datensätze fest? Sollen ein oder mehrere Datensätze mit den Feldwerten belegt werden? Warum willst du in existierende Datensätze schreiben?

Grüße vom marabu
  Mit Zitat antworten Zitat
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Datansatz alle Felder kopieren

  Alt 3. Nov 2005, 18:20
Danke für die Tips. Hab jetzt alles so hinbekommen, wie ich wollte.

Warum ich in existierende Datensätze schreiben will hat folgenden Grund:
Für eine Lagernummer wird von der Datenbank durch einen eindeutigen Schlüssel bereits eine Nummer vergeben. Diese Nummer wird für die Lagerhaltung benötigt. Zu einem späteren Zeitpunkt werden die Daten erfasst und dann in die Datenbank eingetragen. Da es nun viele Datensätze mit ähnlichen Daten gibt sollen diese dann mit den Daten eines anderen Datensatzes gefüllt(kopiert) werden und dann halt eben nur die Felder manuell geändert werden wo es Differenzen gibt.

Na, ja. Nochmals vielen Dank für die Hilfe.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz