AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FireDac CopyDataSet kopiert nicht den PK
Thema durchsuchen
Ansicht
Themen-Optionen

FireDac CopyDataSet kopiert nicht den PK

Ein Thema von Kostas · begonnen am 4. Aug 2015 · letzter Beitrag vom 4. Aug 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#11

AW: FireDac CopyDataSet kopiert nicht den PK

  Alt 4. Aug 2015, 15:07
Würdest du das als Bug
bezeichnen?
Formell ist es kein Bug, denn die Felder werden ja korrekt in das lokale DataSet geschrieben. Daß dieses die Felder nicht in die DB zurückschreibt hat mit CopyDataSet gar nichts zu tun, sondern trifft ja auch für andere Änderungen an diesen Feldern zu.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: FireDac CopyDataSet kopiert nicht den PK

  Alt 4. Aug 2015, 15:44
Hallo Uwe,

ich konnte jetzt nachstellen das die Ursache wie du schon sagtest nicht CopyDataSet ist sondern FireDac und dessen Query.
Ich habe in meinem Code nachgeschaut wo ich CopyDataSet verwende.
Es ist immer so das ich ein DataSet über einen DataSnap Server bekomme
und diesen in einer MemTable oder direkt verarbeite. Ich schreibe
also nie über die Query in die DB. Deshalb hat es bis jetzt funktioniert.
Dass die Query mein übergebener PK einfach ignoriert war mir nicht
klar. Ich habe all die Jahre IBO verwendet und da ist es nicht so.
Wenn ich ein PK(AutoInc) Feld ein Wert übergebe, wird dieser auch zur
Datenbank transportiert, ansonsten feuert er selbst den Generator
unmittelbar vor dem Schrieben in die DB.

Das war jetzt für mich eine sehr sehr wichtige Lehrstunde.
Tausend Dank nochmals Uwe.



Delphi-Quellcode:
function TForm1.MyCopyDataSet(Qu,Zi:TFDQuery):Boolean;
var n:Integer;
begin
  Qu.First;
  while not Qu.Eof do
  begin
    Zi.Insert;
    for n:=0 to Qu.FieldCount-1 do
    begin
      Zi.FieldByName(Qu.Fields[n].FieldName).value := Qu.Fields[n].value;
    end;
    Zi.Post;
    Qu.next;
  end;
  result:=true;
end;
  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 08:07 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