Autor Téma: FireDAC - TClientDataSet  (Přečteno 2110 krát)

Offline Iken

  • Mladík
  • **
  • Příspěvků: 77
  • Karma: 1
FireDAC - TClientDataSet
« kdy: 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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4508
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FireDAC - TClientDataSet
« Odpověď #1 kdy: 20-04-2016, 21:15:54 »
Clone?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Iken

  • Mladík
  • **
  • Příspěvků: 77
  • Karma: 1
Re:FireDAC - TClientDataSet
« Odpověď #2 kdy: 21-04-2016, 20:22:45 »
Clone čeho?

Asi by pomohl nějaký kód ;-)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4508
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FireDAC - TClientDataSet
« Odpověď #3 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Iken

  • Mladík
  • **
  • Příspěvků: 77
  • Karma: 1
Re:FireDAC - TClientDataSet
« Odpověď #4 kdy: 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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4508
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FireDAC - TClientDataSet
« Odpověď #5 kdy: 22-04-2016, 18:29:32 »
« Poslední změna: 22-04-2016, 18:31:57 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Iken

  • Mladík
  • **
  • Příspěvků: 77
  • Karma: 1
Re:FireDAC - TClientDataSet
« Odpověď #6 kdy: 22-04-2016, 19:19:42 »
Díky, ale ani to neklaplo :-(

E2010 Incompatible types: 'TCustomClientDataSet' and 'TDataSet'

Offline Iken

  • Mladík
  • **
  • Příspěvků: 77
  • Karma: 1
Re:FireDAC - TClientDataSet
« Odpověď #7 kdy: 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;

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4508
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FireDAC - TClientDataSet
« Odpověď #8 kdy: 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.  
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline starous

  • Mladík
  • **
  • Příspěvků: 61
  • Karma: 2
Re:FireDAC - TClientDataSet
« Odpověď #9 kdy: 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;