A tibupdatesql törzset írásbeli tranzakcióval

A TIBUpdateSQL örököse írásbeli tranzakcióval

Itt van egy kísérlet arra, hogy bemutassuk az IBX-ben az IBCustomDataset összetevők IBCustomDataset összetevőinek "olvasására" és "írásba" történő elválasztásának elvét. Az IBUpdateSQL báziskomponensként való használatát a forráskód megváltoztatásának és annak elégségességének minimalizálására törekvő várakozással magyarázza - az IBDataset újratervezésével az IBX új verzióinak használata esetén valószínű problémák merülhetnek fel.

Az IBUpdateSQL mechanizmusának megértéséhez ki kell emelni a következő tulajdonságokat és módszereket: privát
FQueries: TIBQuery tömb [TUpdateKind];
nyilvános
tulajdonság lekérdezés [UpdateKind: TUpdateKind]: TIBQuery olvassa el a GetQuery; Az FQueries tömb tulajdonsága olyan TIBQuery típusú objektumokat tárol, amelyek értéke kezdetben nulla. Amikor először hívja a lekérdezést, a GetQuery metódust hívják - létrehoz egy objektumot, és inicializálja annak tulajdonságait IBDatabase és IBTransaction. Megjegyzem, hogy valószínű, hogy egy vagy több TIBQuery objektum egyszerűen nem lesz létrehozva, azaz. Nem volt adatmódosítás, és az FDataset nem érte el az UpdateObject.Apply módszert. Egyszerűen fogalmazva, az IBUpdateSQL komponens "manuális" munkát végez, mint a var
MySql: TIBSQL;

MySql: = TIBSQL.Create (null);
MySql.database: = dm.Base;
MySql.Transaction: = dm.trRead;
MySql.SQL: = 'la-la-la';

véglegesítése
ha hozzárendelt (MySql)
MySql.Free; Mindez megvalósul a GetQuery módszerben.

A tranzakció "végrehajtásának" feladatának megoldásához meg kell adnia a kódot:
  1. a SetUpdateTransaction eseménykezelést
  2. módosítsa a GetQuery változatait
  3. kezelje az Értesítési eseményt
  4. megkerülni a magánéletet és a statikus adatokat
Ha az első három pont többé-kevésbé egyértelmű, akkor az utolsó pont az FQueries és néhány módszer helyettesítését igényli. Az alábbiakban olyan megoldást találtam, amelyet évek óta használok különböző változatokban.