Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz duplizieren (https://www.delphipraxis.net/146918-datensatz-duplizieren.html)

Franz100 29. Jan 2010 11:18

Datenbank: ABSdatabase • Zugriff über: datasource

Datensatz duplizieren
 
Hallo

ich möchte mittels Button-Klick den aktuellen Datensatz kopieren. Dazu verwende ich folgenden Code (den ich im Forum gefunden habe)
Delphi-Quellcode:
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
 Data: array of variant;
  aRecord: array of TVarRec;
  i: integer;
  max: integer;
  Marken: TDataSet;

   begin
  max := Marken.fields.count - 1;
  // set the lenghth of the arecord array to be the same as the number of
  // elements in the data array
  SetLength(arecord, max + 1);
  SetLength(data, max + 1);


  // set the variant type pointers to the data array
  for i := 0 to max do
  begin
    arecord[i].VType := vtVariant;
    arecord[i].VVariant := @data[i];
  end;


  // Copy the Record to the Array
  for i := 0 to max do
    Data[i] := Marken.fields[i].value;


  Marken.Insert;
  Marken.SetFields(aRecord);
end;
Läßt sich auf compilieren, nur wenn ich im Programm den Button anklicke, erhalte ich eine Zugriffsverletzung.
Weiß jemand wo es hakt?

mkinzler 29. Jan 2010 11:21

Re: Datensatz duplizieren
 
Ich würde SQL verwenden

DeddyH 29. Jan 2010 11:30

Re: Datensatz duplizieren
 
Wenn ABS die Syntax INSERT INTO ... SELECT FROM unterstützt, scheint mir das auch das einfachste zu sein.

p80286 29. Jan 2010 13:04

Re: Datensatz duplizieren
 
Zitat:

Zitat von Franz100
Läßt sich auf compilieren, nur wenn ich im Programm den Button anklicke, erhalte ich eine Zugriffsverletzung.

wo denn genau?
ansonsten die Standardantwort, da wo das Programm auf nicht vorhandene Daten zugreift, weil jemand vergesssen hat, ein New Create usw. durchzuführen.

Hast Du die Bereichsprüfung an?

Gruß
K-H

olaf 30. Jan 2010 08:19

Re: Datensatz duplizieren
 
Hallo,

versuch mal das.

Delphi-Quellcode:
  var
  Datatab : array of variant;
  Recordtab : array of TVarRec;
  anzfields : integer;


procedure TDatentools.datensatzkopieren(tabelle:TDataSet);
var
  i : integer;
begin
anzfields := tabelle.fields.count -1;
SetLength(Recordtab,anzfields+1);
SetLength(Datatab,anzfields+1);

for i :=0 to anzfields do
begin
Recordtab[i].VType := vtVariant;
Recordtab[i].VVariant := @Datatab[i];
end;

for i :=0 to anzfields do
Datatab[i] := tabelle.fields[i].value;
end;

procedure TDatentools.datensatzeinfuegen(tabelle:TDataSet;anftab,
    endtab:integer);
var
  i : integer;
begin
for i := anftab to anzfields-endtab do
tabelle.fields[i].value := Datatab[i];


//anftab ist das feld ab dem der eintrag aus dem kopierten record in der zieltabelle erfolgt
//endtab ist das feld bis zu dem der eintrag aus dem kopierten record in der zieltabelle erfolgt

//ausführen
//tabelle.append
//Datensatzeinfuegen(tabelle,anftab,endtab);
//tabelle.post

// vorher natürlich dataenstzkopieren aufrufen
end;
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

fkerber 30. Jan 2010 08:23

Re: Datensatz duplizieren
 
Hi!

Bitte verwende -Tags für Code-Schnippsel - dann sind sie viel besser lesbar ;)

Danke!


Grüße, Frederic

mkinzler 30. Jan 2010 09:15

Re: Datensatz duplizieren
 
Zitat:

Bitte verwende -Tags für Code-Schnippsel - dann sind sie viel besser lesbar ;)
Das hab ich mal für dich übernommen, das nächste mal aber selber machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 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