Databáze > Firebird a Interbase

Table.Delete OK, Table.Post NIE

<< < (2/11) > >>

pf1957:

--- Citace: Stanislav Hruška  20-10-2020, 21:46:09 ---Skúšam najjednoduchší prípad - práca priamo s jedinou tabuľkou.

--- Konce citace ---
Jako 1. krok se vykasli na UpdateTransaction a pouzij jen jednu ReadCommited RW transakci.
Jako 2. krok, kdyz to stale nebude videt si dej bkpt po commit a podivej se vedle z nejakeho SQL Manageru na obsah DB, jestli je to opravdu commitnute.

pf1957:

--- Citace: Stanislav Hruška  20-10-2020, 22:16:14 ---Narýchlo som hľadal, kde to spúšťam, ale som to nenašiel. Nevadí, budem krokovať.

--- Konce citace ---
No tu transakci nejspis nastartuje ten automaticky rezim jeste pred tim, nez bys ho pripadne vypnul tim StartTransaction (pokud se to tedy u FD vubec vypina).

Stanislav Hruška:
Nie. Spúšťam ich sám. Ale používal som Close/FreeAndNil a to neuzatvorí transakciu. Takže to musím celé prejsť. Len teraz vidím, koľko otvorených transakcií mi viselo vo vzduchu.

Jirka:

--- Citace: pf1957  20-10-2020, 22:18:52 ---Jako 1. krok se vykasli na UpdateTransaction a pouzij jen jednu ReadCommited RW transakci.
Jako 2. krok, kdyz to stale nebude videt si dej bkpt po commit a podivej se vedle z nejakeho SQL Manageru na obsah DB, jestli je to opravdu commitnute.

--- Konce citace ---

Při testovaní bych to ponechal, ale při ostrém provozu bych se radši držel zásady transakce RW   bych držel aktivní pouze po dobu vlastního zapisu a pak deaktivovat
(což není commit ani rollback) a pro prohlížení dat a tisk vytvařet pouze Read only transakce .
Já používám  transakce níže uvedeným systémem a mám jistotu že mi nikde žadná transakce nezustane viset.


--- Kód: ---  function GetPocetKatastru: Integer;
var
  Q1: TpFibQuery;
  i: Integer;
  ASQL: string;
  IBTransactionV: TpFIBTransaction;

  begin
  Result := 0;
  ASQL := Format('SELECT COUNT(*) FROM KATASTR ', []);
  i := 0;
  VytvorCteciTransakci(IBTransactionV);
  Q1 := TpFibQuery.Create(nil);
  try
    try
      Q1.Database := DM1.pFIBDatabase1;
      Q1.Close;
      Q1.Transaction := IBTransactionV;

      if not Q1.Transaction.Active then       Q1.Transaction.StartTransaction;

      Q1.SQL.Add(ASQL);
      Q1.ExecQuery;
      Result := Q1.FieldByName('COUNT').AsInteger;
      Q1.Close;

    except
    {$I 'fibq-except.inc'}
    end;

  finally
    FreeAndNil(IBTransactionV);
    FreeAndNil(Q1);
  end;
end;


--- Konec kódu ---

Jan Fiala:
To je samozřejmě tak, jak by se proti SQL serveru pracovat mělo. Ale on nepoužívá SQL, ale pracuje s Table.
Takže má otevřenou transakci od okamžiku, kdy zavolá edit, až po post (uživatel začne editovat a odskočí si na oběd).
Na problémy narazí v okamžiku, kdy bude ctít používat víceuživatelský přístup, uživatelé si budou zamykat záznamy/tabulky, začne řešit, proč mu tam vznikají deadlocky.

Navigace

[0] Seznam témat

[#] Další strana

[*] Předchozí strana

Přejít na plnou verzi