Announcement

Collapse
No announcement yet.

Datensatz Kopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatz Kopieren

    Hallo

    Ich hab da ein problem! Ich möchte einen Datensatz von einem DBGridPro mit einem ToolButton Kopieren und wiederrum ins Grid einfügen .. ich habe das ganze an eine AcessDatenBank angehängt, AdrID, AdrVorname, AdrName, AdrStrasse, AdrPLZ, AdrOrt.
    Das ganze sollte nicht mit einem TBatchMove gemacht werden weil es eine AdoConnection ist. Danke für euere Hilfe XENON

  • #2
    Hallo,

    das folgende Beispiel demonstriert, wie ein Datensatz kopiert werden kann. Allerdings ist eine 1:1-Kopie immer dann nicht möglich, wenn die eine Tabellenspalte <i>AutoWert</i> definiert wurde. Die Kopierroutine prüft daher über die Recordset-Eigenschaft <b>ISAUTOINCREMENT</b> nach, ob dieser Wert mit kopiert werden darf oder nicht. Über die TADODataSet-Eigenschaft <b>RecordSet</b> stellen die dbGo-Komponenten (ADO Express)einen direkten Zugriff auf das originale <i>RecordSet</i>-Objekt von ADO zur Verfügung.

    <pre>
    { ************************************************** *******************
    Autor : Andreas Kosch
    Compiler : Delphi 5 UpdatePack#1
    Betriebssystem : Windows 2000
    Datum : 22.12.2000
    Beschreibung : Datensatz von einer TADODataSet-Instanz in eine
    andere kopieren, wobei alle AutoWert-Spalten
    unberücksichtigt bleiben.
    ************************************************** ******************** }

    unit CopyRecordFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, ComCtrls, Db, Grids, DBGrids, ADODB;

    type
    TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    ADODataSet1ID: TAutoIncField;
    ADODataSet1Wert: TWideStringField;
    ADODataSet1EditUser: TWideStringField;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    StatusBar1: TStatusBar;
    DBGrid2: TDBGrid;
    ADODataSet2: TADODataSet;
    ADODataSet2ID: TAutoIncField;
    ADODataSet2Wert: TWideStringField;
    ADODataSet2EditUser: TWideStringField;
    DataSource2: TDataSource;
    CheckBoxConnected: TCheckBox;
    ButtonCopy2: TButton;
    procedure CheckBoxConnectedClick(Sender: TObject);
    procedure ButtonCopy2Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.CheckBoxConnectedClick(Sender: TObject);
    begin
    ADOConnection1.Connected := CheckBoxConnected.Checked;
    ADODataSet1.Active := CheckBoxConnected.Checked;
    ADODataSet2.Active := CheckBoxConnected.Checked;
    end;

    procedure TForm1.ButtonCopy2Click(Sender: TObject);
    var
    iFields : Integer;
    i : Integer;
    begin
    ADODataSet2.Append;
    with ADODataSet1 do
    begin
    iFields := FieldCount - 1;
    for i := 0 to iFields do
    if RecordSet.Fields[i].Properties['ISAUTOINCREMENT'].Value = False then
    ADODataSet2.FieldByName(Fields[i].FieldName).Assign(
    FieldByName(Fields[i].FieldName));
    end;
    ADODataSet2.Post;
    StatusBar1.SimpleText := 'Datensatz in die 2. Tabelle kopiert';
    end;

    end.
    </pre>
    Wenn ein TDBGrid an die Datenquelle angeschlossen ist, zeigt es dann automatisch den kopierten (neu eingefügten) Datensatz an.

    Comment


    • #3
      Danke für deine hilfe. Werd deinen Quelltext gleich mal testen.
      gruss xeno

      Comment

      Working...
      X