IBEvent form megnyitásakor

IBEvent form megnyitásakor
2007-02-18T18:31:10+01:00
2007-02-19T21:43:26+01:00
2022-11-03T11:00:37+01:00
*deleted_42098963
Sziasztok!

Ha egy adatot módosítani szeretnék, és rákattintok a Módosítás gombra, ekkor megnyitja ugyebár az általam készített módosítás ablakot.
Namost. Ha egy másik kliens eközben ezt a rekordot törölni szeretné, vagy ő is módosítaná, akkor adni kellene neki egy üzenetet, hogy nem lehet törölni.

Ezt hogyan lehet?

Ui.: Az megy, hogy pl a módosításnak létrehozunk egy POST_EVENT-es triggert, de ez csak akkor megy el, ha módosítás előtt/után van.

Firebird 1.5.3
Delphi 7
Mutasd a teljes hozzászólást!
Nem.

A következőt kellene tenni:
- írj egy metódust, ami ebbe a táblába beszúrja azt az azonosítót, amit szerkesztesz, viszont készüjl arra, hogy az INSERT exception-t fog dobni dupla rekord esetén. Ezt fogjuk felhasználni arra, hogy tudjuk már valaki más szerkeszti azt (a SELECT + INSERT kombó nem működik, mert a SELECT nem blokkol, stb.)
- írj egy metódust, ami kitörli az azonosítót a munka végeztével.
- a szerkesztő ablak megjelenítésekor indítsd el az első metódust, és ha nem sikerül végrehajtani, mehet az üzenet, hogy már dolgoznak azon a rekordon
- a szerkesztő ablak bezárásakor futtasd le a második metódust, ami törli a rekordot

érdemes lehet még egy olyan metódus is, ami minden bejegyzést töröl, arra az esetre ha a kliens összeomlott volna a 2. metódus hívása előtt...
Mutasd a teljes hozzászólást!

  • Nincs elegáns megoldás, Kell egy REKORD_LOCK tábla, amibe bejegyzed, melyik rekordot kezded szerkeszteni, és a másik oldal meg ellenőrzi, hogy nem-e már valaki szerkeszti a célrekordot
    Mutasd a teljes hozzászólást!
  • Megvan a tábla. Akkor most adjak neki egy AFTER UPDATE triggert? Ha igen,akkor mi legyen a POST_EVENT()-ben?
    Mutasd a teljes hozzászólást!
  • Nem.

    A következőt kellene tenni:
    - írj egy metódust, ami ebbe a táblába beszúrja azt az azonosítót, amit szerkesztesz, viszont készüjl arra, hogy az INSERT exception-t fog dobni dupla rekord esetén. Ezt fogjuk felhasználni arra, hogy tudjuk már valaki más szerkeszti azt (a SELECT + INSERT kombó nem működik, mert a SELECT nem blokkol, stb.)
    - írj egy metódust, ami kitörli az azonosítót a munka végeztével.
    - a szerkesztő ablak megjelenítésekor indítsd el az első metódust, és ha nem sikerül végrehajtani, mehet az üzenet, hogy már dolgoznak azon a rekordon
    - a szerkesztő ablak bezárásakor futtasd le a második metódust, ami törli a rekordot

    érdemes lehet még egy olyan metódus is, ami minden bejegyzést töröl, arra az esetre ha a kliens összeomlott volna a 2. metódus hívása előtt...
    Mutasd a teljes hozzászólást!
  • REKORD_LOCK tábla:
    RECORD_ID Integer Not Null Primary Key

    Ablak megjelenítése előtt:
    try with Rekord do begin Close; SQL.Clear; SQL.Add('INSERT INTO REKORD_LOCK (RECORD_ID)') SQL.Add(' VALUES (:RecordAzon)'); ParamByName('RecordAzon').AsInteger := Ugyfelek.FieldByName('Ugyfel_Azon').AsInteger; ExecSQL; end; Modosit.ShowModal; except on E:Exception do ShowMessage('A rekord már szerkesztés alatt áll!'); end;

    Bezáráskor:
    with Rekord do begin Close; SQL.Clear; SQL.Add('DELETE FROM REKORD_LOCK') SQL.Add('WHERE RECORD_ID = :RecordAzon'); ParamByName('RecordAzon').AsInteger := Ugyfelek.FieldByName('Ugyfel_Azon').AsInteger; ExecSQL; end;

    Nos így?
    Mutasd a teljes hozzászólást!
  • Igen, így gondoltam.
    Mutasd a teljes hozzászólást!
  • Köszönöm!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd