Forum Delphi.cz

Delphi => FireDAC => Téma založeno: Iken 20-04-2016, 20:28:56

Název: FireDAC - TClientDataSet
Přispěvatel: Iken 20-04-2016, 20:28:56
Ahoj,
poradíte mi někdo jak přesypat data z TDataSet do TClientDataSet?  Našel jsem si jak tam dostat jednotlivá pole - hlavičku, ale vlastní data nikoli :-(

Kód: [Vybrat]
ClientDataSet1.FieldDefs.Assign(SQLModule.DataSource3.DataSet.FieldDefs);
ClientDataSet1.CreateDataSet;

Určitě to bude jednoduché, ale...

Díky moc za radu
IKEN
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Stanislav Hruška 20-04-2016, 21:15:54
Clone?
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Iken 21-04-2016, 20:22:45
Clone čeho?

Asi by pomohl nějaký kód ;-)
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Stanislav Hruška 21-04-2016, 22:05:03
Pomôže napísať ClientDataSet1.Clone, dať kurzor na clone a stlačiť F1. Aspoň troška vlastnej aktivity.
Alebo skočiť na stránku EMB FireDAC a tam to vyhľadať.
Je to vytvorenie klonu DataSet-u. Píše o tom aj Marco Cantu.
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Iken 22-04-2016, 17:34:26
:-D

Kdyby třída TClientDataSet měla metodu Clone (nabízí se mi pouze CloneCursor nebo CloneSource), tak bych se neptal - proto jsem prosil o ukázku kódu, zda jsem slepí či co ...

Zkusím tedy popátrat ještě ba FireDAC, snad tam budu úspěšnější než byl slovutný google.

IKEN
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Stanislav Hruška 22-04-2016, 18:29:32
Tak nakoniec to je CloneCursor. Ten otáznik som tam nedával len tak :)
ms-help://embarcadero.rs_xe7/libraries/FireDAC.Comp.DataSet.TFDDataSet.CloneCursor.html (http://forum.delphi.cz/ms-help://embarcadero.rs_xe7/libraries/FireDAC.Comp.DataSet.TFDDataSet.CloneCursor.html)
Pozri si aj veci okolo toho.
ms-help://embarcadero.rs_xe7/libraries/Datasnap.DBClient.TCustomClientDataSet.CloneCursor.html (http://forum.delphi.cz/ms-help://embarcadero.rs_xe7/libraries/Datasnap.DBClient.TCustomClientDataSet.CloneCursor.html)
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Iken 22-04-2016, 19:19:42
Díky, ale ani to neklaplo :-(

E2010 Incompatible types: 'TCustomClientDataSet' and 'TDataSet'
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Iken 22-04-2016, 19:36:49
Tak zatím mi funguje tento neohrabaný kód = neříkejte mi, že to nejde nějakou metodou ...

Kód: [Vybrat]
  ClientDataSet1.FieldDefs.Assign(SQLModule.DataSource3.DataSet.FieldDefs);
  ClientDataSet1.CreateDataSet;

  if (SQLModule.DataSource3.DataSet.FindFirst) then
  begin
    repeat
      ClientDataSet1.Append;
      for i := 0 to ClientDataSet1.FieldCount - 1 do
      begin
        if ClientDataSet1.Fields[i].ReadOnly  then
        begin
          ClientDataSet1.Fields[i].ReadOnly:= not ClientDataSet1.Fields[i].ReadOnly;
        end;
        ClientDataSet1.FieldValues[ClientDataSet1.Fields[i].DisplayName]:= SQLModule.DataSource3.DataSet.FieldValues[ClientDataSet1.Fields[i].DisplayName];
      end;
      ClientDataSet1.Post;
    until (not SQLModule.DataSource3.DataSet.FindNext);
  end;
Název: Re:FireDAC - TClientDataSet
Přispěvatel: Stanislav Hruška 22-04-2016, 22:19:59
To už je na mňa veľa. Ale
Kód: Delphi [Vybrat]
  1.   if ClientDataSet1.Fields[i].ReadOnly  then
  2.   begin
  3.     ClientDataSet1.Fields[i].ReadOnly:= not ClientDataSet1.Fields[i].ReadOnly;
  4.   end;
  5.  
by som nahradil
Kód: Delphi [Vybrat]
  1.   ClientDataSet1.Fields[i].ReadOnly := False;
  2.  
Název: Re:FireDAC - TClientDataSet
Přispěvatel: starous 22-04-2016, 23:08:04
Zkus použít metodu CopyFields

Kód: [Vybrat]
var
  SourceDS : TDataSet;
  ClientDataSet : TClientDataSet;
begin
  SourceDS.First;
 
  while not SourceDS.EOF do begin
    ClientDataSet.Insert;
    ClientDataSet.CopyFields(SourceDS);
    ClientDataSet.Post;

    SourceDS.Next;
  end;
end;