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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3227
  • Karma: 30
    • Verze Delphi: XE7 professional
FireDAC - clone
« kdy: 03-04-2016, 09:44:38 »
Pokúšam sa podľa príkladu vytvoriť klon tabuľky. Nijako sa mi to nedarí.
Kód: Delphi [Vybrat]
  1.   clnPersonTypes := TFDMemTable.Create(Self);
  2.   clnPersonTypes.CloneCursor(tblPersonTypes);
  3.  
Project JasotSVB.exe raised exception class EFDException with message '[FireDAC][Comp][Clnt]-303. Capability is not supported'.


S Query to ide bez problémov. Ale to už je niečo naviac.
« Poslední změna: 03-04-2016, 10:15:13 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3227
  • Karma: 30
    • Verze Delphi: XE7 professional
Re:FireDAC - clone
« Odpověď #1 kdy: 03-04-2016, 10:39:03 »
Keď som si prečítal, že TFDTable generuje SQL query, tak ma to už netrápi. Ale i tak chcem vedieť prečo to s tabuľkou nejde, keď to je TFDDataSet.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3227
  • Karma: 30
    • Verze Delphi: XE7 professional
Re:FireDAC - clone
« Odpověď #2 kdy: 03-04-2016, 13:35:43 »
HM, vychádza mi, že TFDTable sú "persistent data" a to nie je podporované.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1930
  • Karma: 78
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:FireDAC - clone
« Odpověď #3 kdy: 09-04-2016, 00:38:47 »
Good
Rated 1 time
Co vlastne chces opravdu delat? Nestaci ti spise pouzit FDMemTable http://delphi.cz/post/FireDac-TFDMemTable.aspx

Jinak pokud se u TFDDatasetu dostanes na Table.Rows , tak si muzes delat co chces. vcetne nahrazovani radku datasetu ale je to trosku hardcore. A dostanes se na to celkem jednoduse.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3227
  • Karma: 30
    • Verze Delphi: XE7 professional
Re:FireDAC - clone
« Odpověď #4 kdy: 09-04-2016, 09:50:31 »
Citace
Co vlastne chces opravdu delat?
Mám otvorenú tabuľku a potrebujem ju len prechádzať a čítať. Bez toho aby s mi menil stav komponentov napojených na tabuľku. Jedna z techník je použiť Clone. A ako zdroj uloženia dát som sa rozhodol pre FDMemTable. Myslel som si, že si urobím klon priamo z tabuľky. Ale to mi ani raz neprešlo. Teraz to mám pomocou Query. Mohol by som pracovať aj priamo s Query.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1930
  • Karma: 78
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:FireDAC - clone
« Odpověď #5 kdy: 09-04-2016, 10:02:55 »
Poor
Rated 1 time
No a kdyz pouzijes klasickou konstrukci
Kód: [Vybrat]
bmk: TBookmark;
begin
  bmk := dataset.GetBookmark;
  dataset.DisableControls;
  try
    dataset.First;
    ... tady si delej co chces
  finally
     dataset.gotobookmark(bmk);
     dataset.freebookmark(bmk);
     dataset.enablecontrols;
  end;
   
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3227
  • Karma: 30
    • Verze Delphi: XE7 professional
Re:FireDAC - clone
« Odpověď #6 kdy: 09-04-2016, 10:06:08 »
Tak som to mal pôvodne :)  Nepáčila sa mi tam v pozadí tá zbytočná práca navyše.
« Poslední změna: 09-04-2016, 10:21:38 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 779
  • Karma: 35
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:FireDAC - clone
« Odpověď #7 kdy: 08-04-2018, 14:53:08 »
Co vlastne chces opravdu delat? Nestaci ti spise pouzit FDMemTable http://delphi.cz/post/FireDac-TFDMemTable.aspx

Jinak pokud se u TFDDatasetu dostanes na Table.Rows , tak si muzes delat co chces. vcetne nahrazovani radku datasetu ale je to trosku hardcore. A dostanes se na to celkem jednoduse.

K Table.Rows se u tridy TFDDataSet dostanes vzdy. A zadny "hardcore" to neni. Pristup k interni storage je mnohem intuitivnejsi nez prace s TDataSet API, viz. treba srovnani ziskani hodnoty konkretniho zaznamu nebo iteraci resultsetu. Co se tyce uprav storage a nasledneho promitnuti do dataset objektu; zavolat Resync neni zas tak moc ;)
« Poslední změna: 08-04-2018, 14:55:05 od Delfin »
I'm a soldier, so don't panic!

Offline František

  • Hrdina
  • ****
  • Příspěvků: 335
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
Re:FireDAC - clone
« Odpověď #8 kdy: 17-04-2018, 16:37:36 »
Kód: [Vybrat]
function GetMemTable(SQLcommand:string): TFDMemTable;
var
  qq:TFDQuery;
  dm: TFDDataMove; // v DX tusim BatchMove (mám XE5)
begin
// vytvorím konekšn
//SQLcommand open do qq

Result := TFdmemtable.Create(Self);
dm := TFDDataMove.Create(Self);

dm.Destination := result;
dm.Source := qq;
dm.Execute;
//uzavrem konekšn a funkcia mi vráti MemTable
end
takto mi zostal rezult z funkcie aj po odpojeni od DB servera

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 779
  • Karma: 35
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:FireDAC - clone
« Odpověď #9 kdy: 17-04-2018, 16:50:33 »
Kód: [Vybrat]
function GetMemTable(SQLcommand:string): TFDMemTable;
var
  qq:TFDQuery;
  dm: TFDDataMove; // v DX tusim BatchMove (mám XE5)
begin
// vytvorím konekšn
//SQLcommand open do qq

Result := TFdmemtable.Create(Self);
dm := TFDDataMove.Create(Self);

dm.Destination := result;
dm.Source := qq;
dm.Execute;
//uzavrem konekšn a funkcia mi vráti MemTable
end
takto mi zostal rezult z funkcie aj po odpojeni od DB servera

Ke kopirovani datasetu slouzi metoda CopyDataSet nebo prime prirazeni pres property Data. Komponenta TFDDataMove slouzi spis k presunu dat mezi databazemi (byt se pro tento ucel da taky vyuzit).
I'm a soldier, so don't panic!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):