Poslední příspěvky

Stran: 1 2 [3] 4 5 ... 10
21
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od Stanislav Hruška kdy 21-04-2017, 12:34:12 »
Citace
Nič iné nemusím nastaviť. Tu sa to takto nedá? Len s pomocou "Query.Transaction" ?
V princípe som Ti napísal to isté. Robiť to takto v SQL  je z môjho pohľadu poriadna kravina.

Zober si takýto prípad:
qryMaster - zbehne správne. Ty tam zavoláš Commit
qryDetail - je závislý na TableMaster a spol. ExecSQL z nejakého dôvodu padne. Zavoláš RollBack.

A teraz mi povedz, čo urobíš s TableMaster. Ostali Ti tam "hluché" záznamy. Budú Ti robiť obrovské problémy. V mojej ukážke buď zbehne všetko, alebo nič! Integrita DB je zachovaná. V Tvojom prípade nie !!!

Na také jednoduché prípady si môžeš urobiť rutinu. Najradšej v rámci nejakej vlastnej triedy.
22
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od berlusco1974@azet.sk kdy 21-04-2017, 12:26:36 »
Ja, ale ja potrebujem v rámci jedného SQL.Textu. V starých programoch (Advantage) to používam napr. takto:

BEGIN TRANSACTION;
TRY
  INSERT INTO cis_str (Str,StrN)
  VALUES (:Str,:StrN);
  COMMIT WORK;
CATCH ALL
  ROLLBACK WORK;
  RAISE;
END;

Nič iné nemusím nastaviť. Tu sa to takto nedá? Len s pomocou "Query.Transaction" ?
23
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od Stanislav Hruška kdy 21-04-2017, 12:06:18 »
Citace
A práve do toho SQL textu budem ja potrebovať tie transakcie...
:o :o :o
Tak to si zjavne čosi nepochopil. Budeš mať len dve transakcie ;)
  • tá bude určená len na čítanie. SELECT * FROM MYTABLE
  • transakcia určená pre updaty - Edit, Insert a Delete
Určite budeš chcieť dodržať pravidlo atomicity a integritu DB. Všetky spolu súvisiace zmeny MUSÍŠ robiť len pod jednou transakciou. Ako na to (princíp):
Kód: [Vybrat]
  QueryInsert - nastavím parametre
  QueryUpdate - nastavím parametre
  MyTable.Insert/Edit;
  MyTable.FieldByName('Cosi').AsString := 'Aký som frajer';
  ...
  QueryInsert .Transaction.StartTransaction;

  try
     MyTable.Post;  // Vytvorené primárne kľúče sú k dispozícii !!!
    QueryInsert.ExecSQL;  // Vytvorené primárne kľúče sú k dispozícii !!!
    QueryUpdate.ExecSQL;
     QueryInsert .Transaction.Commit;
  except
     on E: EFDDBEngineException do
     begin
       QueryInsert.Transaction.Rollback;
       raise;
     end;
  end;
24
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od berlusco1974@azet.sk kdy 21-04-2017, 11:48:59 »
Pod pojmom klasický script som aj ja myslel vlastne SQL.Text .

V mojich minulých programoch (databáza Advantage), som nikdy nepoužíval databázové komponenty (DBEdit a pod). Dokonca málokedy používam aj Table. Ani teraz neplánujem. Na formulári klienta používam klasické komponenty a potom všetky zmeny (INSERT, UPDATE) dávam do jedného SQL.Text-u a uložím. A práve do toho SQL textu budem ja potrebovať tie transakcie...
25
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od Stanislav Hruška kdy 21-04-2017, 11:39:48 »
Ja si v EMS skladám a skúšam akurát tak SQL.Text ;D  To nedokážem priamo napísať.
Ešte jedno všeobecné odporúčanie. Dlho mi trvalo kým so ho prijal. Ale to odporúčanie je správne.

Všetko v Delphi, čo je spojené s DB si vytváraj dynamicky. A nepoužívaj DB komponenty (TDBEdit a pod.). Vyhneš sa mnohým problémom. DBGrid a DBNavigator sú pre mňa zakázané veci. Namiesto DBGrid používam TVirtualStringTree.
Prečo:
  • môžeš si tam nasekať rôzne druhy údajov. Nielen z DB
  • zobrazíš si ich ako
  • klasickú tabuľku, alebo
  • ako stromovú štruktúru
A vždy pracuješ len s jediným komponentom. Je neskutočne prepracovaný.
26
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od berlusco1974@azet.sk kdy 21-04-2017, 11:30:37 »
Najskôr sa snažím príkazy vyskúšať, ktoré ja v DELPHI neskôr budem využívať, na jednoduchom scripte. Potom ten script jednoducho prekopírujem do Delphi, a po prípade upravím.

To je môj plán. :-O

Ďakujem za Vašu poznámku. Pozriem si Vaše príspevky.
27
Firebird a Interbase / Re:EMS script - Transakcie
« Poslední příspěvek od Stanislav Hruška kdy 21-04-2017, 11:20:42 »
Úplne mimo tému:
 
Keď som začínal, tak som sa snažil všetko dať/preniesť prácu na DB server. To bolo  vplyvom teórie. To znamená uložené procedúry, pohľady a pod. Tu ma nasmerovali, aby som to radšej riešil na klientovi. Tie rady vychádzali z dlhoročných praktických skúseností. A tak okrem domén, tabuliek a generátorov nemám v DB nič.
Skús to zvážiť. A nebudeš musieť riešiť takéto problémy.

Niektoré dôvody, čo si pamätám, boli:
  • ak čosi zmením, tak mi stačí zameniť  exe a nemusím siahať do DB. Pritom netuším v akom stave (verzia) DB je.
  • lepšie sa s tým pracuje v Delphi než v DB. Môžeš si to dynamicky meniť podľa potreby a nemusíš pre každú situáciu siahať do DB.
Prebehni si moje témy, keď som ja začínal s FB. O DB som vlastne nič nevedel. Základy som mal z Access-u. Dostal som veľmi obsiahle odpovede a mali so mnou neskutočnú trpezlivosť. Využi to.
28
Firebird a Interbase / EMS script - Transakcie
« Poslední příspěvek od berlusco1974@azet.sk kdy 21-04-2017, 10:46:55 »
Zoznamujem sa s Firebirdom.
V programe EMS v klasickom scripte sa snažím o zápis transakcie (Firebird2.5).

EXECUTE BLOCK AS
begin
  SET TRANSACTION READ ONLY ISOLATION LEVEL SNAPSHOT;

  INSERT INTO TESTING VALUES (1);
  INSERT INTO TESTING VALUES (2);
  COMMIT;

  SELECT * FROM TESTING;
  ROLLBACK;
end

Precompiler Error: Syntax error - SET.

Všade na internete sa píše, že SET TRANSACTION sa používa!

Poraďte mi, prosím.
29
Obecné / Re:TObjectList<T>.Sort - ale položky zoznamu
« Poslední příspěvek od Radek Červinka kdy 21-04-2017, 10:19:08 »
oxo - dobře ty.

Já jsem to .Compare rozepsal, protože většinou řadím podle více věcí a chtěl jsem aby bylo jasné jak to udělat obecně,
ale to s tou anonymní metodou je pěkné.
30
Obecné / Re:TObjectList<T>.Sort - ale položky zoznamu
« Poslední příspěvek od Stanislav Hruška kdy 21-04-2017, 09:54:48 »
Riešenie od Radka funguje. Už len pochopiť ako to pracuje ;) .
Ďakujem obom.
Stran: 1 2 [3] 4 5 ... 10