Autor Téma: FDMemTable - uloženie obsahu do tabuľky  (Přečteno 1749 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6924
  • Karma: 44
    • Verze Delphi: W10 + D11.1
FDMemTable - uloženie obsahu do tabuľky
« kdy: 11-02-2022, 19:16:03 »
Môj neúspešný pokus vyzerá takto
Kód: [Vybrat]
  FMTSpace := TFDMemTable.Create(nil);
  FMTSpace.CachedUpdates := True;
  Naplnenie MemTable...
  FMTSpace.UpdateOptions.UpdateTableName := 'DISTANCES';
  FMTSpace.UpdateOptions.AutoCommitUpdates := True;
  ShowMessage(IntToStr(FMTSpace.ApplyUpdates(-1)));
MemTable má dva záznamy. Viem je obsah uložiť do DB pomocou Query. Považujem to za prácu navyše.
Nemám žiadnu chybu pri ApplyUpdates.
« Poslední změna: 11-02-2022, 19:18:48 od Stanislav Hruška »
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6924
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #1 kdy: 14-02-2022, 21:22:42 »
Nikto neporadí? Podarilo sa mi FDMemTable naplniť údajmi. Ale ten update tabuľky sa mi nedarí. Píšu
Citace
Ak chcete odoslať aktualizácie do databázy, musíte použiť ApplyUpdates. Ak chcete zlúčiť protokol zmien, musíte zavolať CommitUpdates.
Ale ako určiť cieľovú tabuľku ani slovo. Tak netuším, či mi tam chýba nejaký príkaz.
.
Tie ich príklady a popisy sú otrasné. Polovicu vecí tam neuvedú. Napríklad, že pred použitím CopyDataSet musím mať dva riadky
Kód: [Vybrat]
    FMTSpace.Open;
    FMTSpace.Edit;
    FMTSpace.CopyDataSet(QryDistanceCalc, [coRestart, coAppend]);
To som zistil iba metódou pokus - omyl.

Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3479
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #2 kdy: 14-02-2022, 23:30:49 »
Ale ako určiť cieľovú tabuľku ani slovo. Tak netuším, či mi tam chýba nejaký príkaz.
Ja s tema tabulkama nikdy nic nedelal, ale podle me je to stejne jako u query: nadefinovana pole v datasetu musi odpovidat underlying DB tabulce a pokud se select nekryje se sloupci v tabulce, tak mi z toho plyne, ze bud cteni do mem tabulky nebo zapis z ni musis udelat pesky. U CDS jsme delavali oboje. Jeste si matne vzpominam, ze kdyz jsem portoval aplikace z FIB+ komponenta na FireDAC, ze jsem tam kvuli kompatibilite nejak zaboxovaval TFDUpdateSQL

Ja uz zadnou DB nemam nainstalovanou, abych zkusil funkci example.
« Poslední změna: 14-02-2022, 23:35:19 od pf1957 »

Offline František

  • Guru
  • *****
  • Příspěvků: 867
  • Karma: 8
    • Verze Delphi: comunity 10.4.2, D2007, D11
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #3 kdy: 15-02-2022, 11:34:10 »
potrebujes k tomu etse   TFDBatchMove, TFDBatchMoveDataSetReader, TFDBatchMoveDataSetWriter;

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6924
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #4 kdy: 15-02-2022, 13:22:49 »
potrebujes k tomu etse   TFDBatchMove, TFDBatchMoveDataSetReader, TFDBatchMoveDataSetWriter;
Pozriem sa na tie tri triedy. Potom sa rozhodnem. Prosím Ťa, hoď sem nejaký príklad. Ja som nič nenašiel.
Ďakujem.
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 867
  • Karma: 8
    • Verze Delphi: comunity 10.4.2, D2007, D11

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6924
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #6 kdy: 15-02-2022, 17:11:38 »
Ďakujem. Pozriem sa na to. Ja som dospel k tomuto funkčnému riešeniu
Kód: [Vybrat]
procedure TCalcSpacing.UpdateTbl;
var
  DataSetReader: TFDBatchMoveDataSetReader;
  DataSetWriter: TFDBatchMoveDataSetWriter;
  FDBatchMove: TFDBatchMove;
  Tbl: TFDTable;
begin
  FDBatchMove := TFDBatchMove.Create(nil);
  FDBatchMove.Mode := dmAlwaysInsert;
  DataSetReader := TFDBatchMoveDataSetReader.Create(FDBatchMove);
  DataSetReader.DataSet := FMTSpace;
  DataSetWriter := TFDBatchMoveDataSetWriter.Create(FDBatchMove);
  Tbl := TFDFunction.NewTable(nil, 'DISTANCES');
  DataSetWriter.DataSet := Tbl;
  FDBatchMove.Execute;
Podľa návodu by som mal použiť
Kód: [Vybrat]
  MemTbl.UpdateOptions.UpdateTableName := 'ADCALC';
  MemTbl.ApplyUpdates(-1);
Neviem či mi tam ešte niečo chýba, ale nefunguje mi to. Hlavne to je podstatne jednoduchšie.
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6924
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #7 kdy: 15-02-2022, 18:23:02 »
Keby s tým niekto začínal, tak tu je pekné zhrnutie základov
https://delphiprogrammingdiary.blogspot.com/2018/11/tfdmemtable-better-alternative-to.html
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 867
  • Karma: 8
    • Verze Delphi: comunity 10.4.2, D2007, D11
Re:FDMemTable - uloženie obsahu do tabuľky
« Odpověď #8 kdy: 15-02-2022, 22:56:12 »
presne tuto stranku som myslel